通过选择给定日期戳的不同项来查询表

时间:2016-03-01 20:07:21

标签: sql postgresql greatest-n-per-group

我正在尝试编写一个选择不同uid的查询,但我想在uid列上选择那些不同的modified_at。{/ p >

示例:

Table_A

uid  data_value modified_at
===  ========== ===========
 1       a          1/1/2016
 1       b          1/2/2016
 1       c          1/3/2016
 2       d          1/1/2016
 2       e          1/2/2016
 3       f          3/1/2016
 3       g          3/3/2016
 3       h          3/4/2016
 4       i          2/1/2016
 5       j          1/5/2016
 5       k          1/6/2016

所以我想选择最近修改过的不同的uid。

我不确定是否存在允许执行此操作的快速查询,而不是将信息单独提取到脚本中并进行修改。

现在写,我所能做的就是

select distinct uid, data_value, modified_at 
from Table_A (...and other stuff if I want to join and do things)

2 个答案:

答案 0 :(得分:1)

您可以使用DISTINCT ON

SELECT DISTINCT ON (uid) uid, data_value, modified_at
FROM Table_A
ORDER BY uid, modified_at DESC

答案 1 :(得分:0)

使用windows函数row_number()并使用cte语法来更好地阅读

 WITH cte as (
      SELECT *,
             row_number() over (PARTITION BY uid  ORDER BY modified_at DESC) as rn
      FROM TableA
 )
 SELECT *
 FROM cte
 WHERE rn = 1