我在Postgres DB中有一个表格,该表具有以下结构:
id | date | groupme1 | groupme2 | value
----------------------------------------
1 |
2 |
3 |
现在我想实现以下内容:
- 在GroupMe1和GroupMe2之后对表进行分组
- 获取每个组的价值
- ,但仅是每个小组编译的最后一个条目(日期之后又播种)
示例:
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
这种方法的问题:
- 值得一提的是,较高的日期具有较高的ID
- 需要长时间
是否有更快,更好的方法?窗口功能可以帮助您吗?
我认为您只想要窗口功能:
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;