为不同的用户获取多个事务的最后一行

时间:2018-01-16 23:35:35

标签: sql spring postgresql jpa

我有一个表格,其结构如下:

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

用户101112的最后一笔交易。行数应该等于表中的用户数。结果应该是用户做的最后一笔交易。在这种情况下,用户10有DR,用户11有DR,用户12有CR。

我怎么能在PostreSQL中写这个?如果它是JPA存储库形式会更好。

2 个答案:

答案 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;