我有一个表格,其结构如下:
id
user_id
type
previous_amount
amount
current_amount
某些记录可能看起来像这样
id, user_id, type, last_amount, amount, cur_amount
1, 10, CR, 20.0, 10.0, 30.0
2, 11, CR, 40.0, 15.0, 55.0
3, 10, DR, 30.0, 5.0, 25.0
4, 12, CR, 5.0, 20.0, 25.0
5, 11, DR, 55.0, 10.0, 45.0
我希望结果看起来像这样:
3, 10, DR, 30.0, 5.0, 25.0
4, 12, CR, 5.0, 20.0, 25.0
5, 11, DR, 55.0, 10.0, 45.0
用户10
,11
,12
的最后一笔交易。行数应该等于表中的用户数。结果应该是用户做的最后一笔交易。在这种情况下,用户10
有DR,用户11
有DR,用户12
有CR。
我怎么能在PostreSQL中写这个?如果它是JPA存储库形式会更好。
答案 0 :(得分:1)
在Postgres中,使用distinct on
最简单:
select distinct on (user_id) t.*
from t
order by user_id, id desc;
答案 1 :(得分:-1)
或者你可以这样做
SELECT *
FROM (SELECT *
, row_number() over(PARTITION BY user_id ORDER BY id DESC) AS RN
FROM table1) AS A
AND A.RN = 1
ORDER BY A.id;