我正在尝试编写一个选择不同uid
的查询,但我想选择那些不同的uid
在modified_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