2017-01-22 64 views
0

编辑不同行:我使用PostgreSQL的SQL SELECT基于两列其中在第三列有最小值

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

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

这是我迄今为止,但我觉得我使用GROUP BY错误的方式

+0

请标记你正在使用的数据库。 –

+0

在一些dbms中,这句话是不正确的。请标记你的dbms。 – McNets

+0

我的不好。我编辑了OP –

回答

0

我认为你可以使用ROW_NUMBER标记与标识和类型的每个组合中的行具有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 
0
Postgres的

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

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