postgres DB中有一个表,其结构如下:
id | date | groupme1 | groupme2 | value
----------------------------------------
1 |
2 |
3 | 现在,我想达到以下目标:
示例:
id | date | groupme1 | groupme2 | value
---------------------------------------
| | A | 1 | 4
| | A | 2 | 7
| | A | 3 | 3
| | B | 1 | 9我目前的做法如下:
SELECT a.*
FROM table AS a
JOIN (SELECT max(id) AS id
FROM table
GROUP BY groupme1, groupme2) AS b
ON a.id = b.id这种办法的问题是:
有更快更好的方法吗?窗口功能对此有帮助吗?
发布于 2016-06-27 10:31:42
我想你只是想要窗口功能:
select t.*
from (select t.*,
row_number() over (partition by groupme1, groupme2 order by date desc) as seqnum
from t
) t
where seqnum = 1;或者,在Postgres中更好的方法是使用distinct on
select distinct on (groupme1, groupme2) t.*
from t
order by groupme1, groupme2, date desc;https://stackoverflow.com/questions/38051613
复制相似问题