gpt4 book ai didi

sql - 在表中找到第一个最低值以及该最低值出现的日期

转载 作者:行者123 更新时间:2023-11-29 12:34:02 25 4
gpt4 key购买 nike

如果我有一个具有以下架构的表:

CREATE TABLE diet_watch (
entry_date date NOT NULL,
weight double precision NOT NULL
);

INSERT INTO diet_watch VALUES ('2001-01-01', 128.2);
INSERT INTO diet_watch VALUES ('2001-01-02', 121.0);
INSERT INTO diet_watch VALUES ('2001-01-03', 122.3);
INSERT INTO diet_watch VALUES ('2001-01-04', 303.7);
INSERT INTO diet_watch VALUES ('2001-01-05', 121.0);
INSERT INTO diet_watch VALUES ('2001-01-06', 128.0);

我将如何编写一个查询来返回两个日期出现最小重量的日期之间的FIRST最小重量?

理想情况下,这将是 ANSI-SQL,即与数据库无关。如果我不得不选择一种 SQL 风格,那将是 PostgreSQL,因为这是我正在使用的数据库。

伪 SQL:

SELECT min(entry_date), min(weight)
FROM diet_watch
where entry date between date1 and date2
group by entry_date;

最佳答案

简单快速的解决方案:

SELECT weight, entry_date
FROM diet_watch
WHERE entry_date BETWEEN '2001-01-02' AND '2001-01-06'
ORDER BY 1, 2
LIMIT 1;

适用于 PostgreSQL 或 MySQL,可能还有其他(不适用于 Oracle 或 MS SQL Server)。

标准 SQL (SQL:2003):

SELECT weight, entry_date
FROM (
SELECT weight, entry_date
,row_number() OVER (ORDER BY weight, entry_date) AS rn
FROM diet_watch
WHERE entry_date between '2001-01-02' and '2001-01-06'
) AS x
WHERE rn = 1;

不支持不实现窗口函数的 RDBMS(如 MySQL)。

标准 SQL 变体 (SQL:2008):

SELECT weight, entry_date
FROM diet_watch
WHERE entry_date BETWEEN '2001-01-02' AND '2001-01-06'
ORDER BY weight, entry_date
FETCH FIRST 1 ROWS ONLY;

只有少数 RDBMS 支持 - 查找 list on Wikipedia .

唯一支持所有这些的 RDBMS 是 PostgreSQL(v8.4 或更高版本)。


解决评论中的问题,我引用 the manual here about ORDER BY :

Each expression can be the name or ordinal number of an output column(SELECT list item), or it can be an arbitrary expression formed frominput-column values.

强调我的。它只是一个语法快捷方式,许多 RDBMS 都支持它。 SQL Server 显然不在其中。

关于sql - 在表中找到第一个最低值以及该最低值出现的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11512523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com