postgres - 如何根据每个事务类型选择每个user_id的最后一笔交易?

时间:2013-06-10 08:05:51

标签: sql database postgresql

我有下表(raw_data):

trans_id,user_id,msg_code,record_time

给定时间范围(from_time,to_time)我想查询: 得到每个用户: 获取每种类型的最后一个msg_code。

更多解释: 希望收到每个用户, 唯一的msg_code,以便每个这样的行是每个用户的最后一个(记录时间明智)

表示例(trans_id,user_id,msg_code,record_time):

1, 1, 100, 2013-06-03 08:32:51
2, 1, 100, 2013-06-03 09:32:51
3, 1, 101, 2013-06-03 08:32:51
4, 1, 102, 2013-06-03 10:32:51
5, 2, 100, 2013-06-03 06:32:51
6, 2, 100, 2013-06-03 07:32:51
7, 2, 100, 2013-06-03 08:32:51

结果示例:

2, 1, 100, 2013-06-03 09:32:51
3, 1, 101, 2013-06-03 08:32:51
4, 1, 102, 2013-06-03 10:32:51
7, 2, 100, 2013-06-03 08:32:51
徒劳的尝试(不工作......):

SELECT DISTINCT ON (user_id,msg_code)
       *
FROM  raw_data
ORDER BY user_id, msg_code ASC
  • 如果有什么不清楚请问。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

原来我只错过了一小部分:

这是有效的:

SELECT DISTINCT ON (user_id,msg_code)
       *
FROM  raw_data
WHERE record_time > '2013-05-28 17:06:01' and record_time < '2013-05-30 17:06:01'
ORDER BY user_id, msg_code ASC, record_time DESC