我的查询需要返回id列和type列的所有唯一行。当有多个具有相同id和类型的行时,它将返回时间列中具有最小值的行。
SELECT id, type, value FROM TableName
GROUP BY MIN(time)
ORDER BY id ASC, type ASC
这是我到目前为止所做的,但我觉得我错误地使用了GROUP BY
答案 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 ;