【发布时间】:2019-06-23 03:42:15
【问题描述】:
我想查找每个客户在每个日期的最近一次购买(客户可能在给定日期进行多次购买,我想要该日期的最近一次购买)。我的数据框如下所示:
Customer_id | Date | Payment | Type
3 '2019-01-28 00:45:00' 128.93 Credit
2 '2019-01-26 01:00:00' 54.36 Debit
3 '2019-01-27 12:00:00' 93.99 Debit
3 '2019-01-28 03:15:00' 164.93 Credit
2 '2019-01-26 17:30:00' 56.74 Credit
2 '2019-01-28 19:15:00' 21.85 Credit
查询的输出应该给我类似以下的内容(我返回每个客户/日期组合的一行,并按客户/日期排序。我不关心类型 - 无论是信用卡还是借记):
Customer_id | Date | Payment
2 '2019-01-26' 56.74
2 '2019-01-28' 21.85
3 '2019-01-27' 93.99
3 '2019-01-28' 164.93
到目前为止,这是我的代码:
SELECT
R1.Customer_id,
date_trunc('day', R1.Date),
R1.Payment
FROM Records R1
WHERE R1.Date = (SELECT MAX(R2.Date)
FROM Records R2
WHERE R2.Customer_id = R1.Customer_id)
GROUP BY Customer_id, date_trunc('day', R1.Date);
我给出的示例是对我正在处理的数据和一些过滤条件的简化,但应该能捕捉到我面临的主要问题。不确定这是否在正确的轨道上,但是当我运行查询时,它似乎对“分组依据”不满意。我是 sql 新手,希望得到帮助!
【问题讨论】:
-
我不相信我们的问题解决了同样的问题。
标签: sql postgresql group-by sql-order-by limit