1

我有下表(raw_data):

trans_id,user_id,msg_code,record_time

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

更多解释:希望为每个用户接收唯一的 msg_code,以便每个这样的行都是每个用户的最后一个(record_time wise)

表示例(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
  • 如果有什么不清楚的请询问。

感谢您的帮助!

4

1 回答 1

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
于 2013-06-10T08:20:03.107 回答