SQL根据两列在第三列中具有最小值的行选择一个不同的行

时间:2017-01-22 23:46:51

标签: sql postgresql

编辑:我正在使用PostgresSQL

我的查询需要返回id列和type列的所有唯一行。当有多个具有相同id和类型的行时,它将返回时间列中具有最小值的行。

SELECT id, type, value FROM TableName 
GROUP BY MIN(time)
ORDER BY id ASC, type ASC

这是我到目前为止所做的,但我觉得我错误地使用了GROUP BY

2 个答案:

答案 0 :(得分:0)

我认为您可以使用ROW_NUMBER标记每个id和type组合中的行,其中 rn = 1 的时间最短,然后使用 WHERE 过滤表的子句:

SELECT id, type, value FROM
(SELECT id, type, value, 
 ROW_NUMBER() OVER(PARTITION BY id, type ORDER BY time) AS rn 
 FROM TableName) a
WHERE rn = 1

答案 1 :(得分:0)

Postgres支持distinct on。这通常是做你想做的最有效的方式:

SELECT DISTINCT ON (id, type) id, type, value
FROM TableName 
ORDER BY id, type, time ;