通过选择具有日期戳的不同项目来查询表



我正在尝试编写一个选择不同uid的查询,但我想选择那些不同的uidmodified_at列上给出顺序。

例:

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。

我不确定是否有一个快速查询可以允许 be 执行此操作,而不是将信息单独拉入脚本并进行修改。

现在写,我能做的就是

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

DISTINCT ON

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

使用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

最新更新