我正在尝试为表中的每个 DISTINCT 用户查找表中的第一个最小值及其发生日期。
这是表架构和一些示例数据:
CREATE TABLE diet_watch (
entry_date date NOT NULL,
user_id int default 1,
weight double precision NOT NULL
);
INSERT INTO diet_watch VALUES ('2001-01-01', 1, 128.2);
INSERT INTO diet_watch VALUES ('2001-01-02', 1, 121.0);
INSERT INTO diet_watch VALUES ('2001-01-03', 1, 122.3);
INSERT INTO diet_watch VALUES ('2001-01-04', 1, 303.7);
INSERT INTO diet_watch VALUES ('2001-01-05', 1, 121.0);
INSERT INTO diet_watch VALUES ('2001-01-01', 2, 121.0);
INSERT INTO diet_watch VALUES ('2001-01-06', 2, 128.0);
我想出的 SQL 在 this snippet 中
我后来被告知这是不正确的,也许有人可以解释我的 SQL 有什么问题?
注意:如果可能的话,我更喜欢 ANSI SQL,但我使用的是 PostgreSQL,所以如果我必须使用特定风格的 SQL,它必须在 PG 上工作。
最佳答案
注意:不确定Window函数是不是ANSI SQL
WINDOW 函数是 SQL:2003 规范的一部分: http://en.wikipedia.org/wiki/Window_function_%28SQL%29#Window_function (谢谢 @a_horse_with_no_name)
试试这个:
http://sqlfiddle.com/#!1/7aa4e/22
SELECT *
FROM
(
SELECT a.*,
ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY weight) AS Position
FROM diet_watch a
) a
WHERE a.Position = 1
关于sql - 为每个不同的用户获取表中的第一个最低值及其发生日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11530120/