如何按各账户最后交易日期分别获取其最近N个月交易数据?
按每个ID自身最后交易日期筛选最近N个月交易数据的实现方案
这个需求完全可行,核心思路是先获取每个ID的最后交易日期,再以此为基准筛选该ID下近3个月的交易记录。
示例数据
ID | Trx_Amount | Trx_Date ID001 | 104 | 04/10/2022 ID002 | 76 | 20/09/2022 ID003 | 82 | 17/08/2022
实现方案
方法1:子查询关联(适配多数数据库)
SELECT t1.* FROM your_table t1 JOIN ( -- 先统计每个ID的最后交易日期 SELECT ID, MAX(Trx_Date) AS last_trx_date FROM your_table GROUP BY ID ) t2 ON t1.ID = t2.ID -- 筛选该ID下交易日期在最后交易日期往前3个月内的记录 WHERE t1.Trx_Date >= DATEADD(MONTH, -3, t2.last_trx_date)
方法2:窗口函数(适用于MySQL 8.0+、PostgreSQL、SQL Server等)
通过窗口函数直接为每条记录打上对应ID的最后交易日期标签,再做筛选:
WITH id_last_trx AS ( SELECT *, MAX(Trx_Date) OVER (PARTITION BY ID) AS last_trx_date FROM your_table ) SELECT ID, Trx_Amount, Trx_Date FROM id_last_trx WHERE Trx_Date >= DATEADD(MONTH, -3, last_trx_date)
不同数据库的日期语法调整
如果使用PostgreSQL,日期计算语法略有不同,可修改为:
SELECT t1.* FROM your_table t1 JOIN ( SELECT ID, MAX(Trx_Date) AS last_trx_date FROM your_table GROUP BY ID ) t2 ON t1.ID = t2.ID WHERE t1.Trx_Date >= t2.last_trx_date - INTERVAL '3 months'
内容的提问来源于stack exchange,提问作者H. D. U.
相关产品推荐
相关产品推荐

