SQL如何查询指定条件用户最近两次缴税日期、总额及间隔
SQL实现方案
默认两张表核心字段如下,和你实际字段名不一致的话直接替换就行:
- table1(缴税记录表):
user_id用户ID、tax_date缴税日期、tax_amount缴税金额 - table2(用户产品关联表):
user_id用户ID、product_id关联产品ID
实现步骤
- 筛出符合要求的目标用户:关联两表过滤
product_id=12的用户,再校验用户最后一次缴税日期为2022-06-19 - 对目标用户按缴税日期倒序排序,取最近2条缴税记录
- 聚合计算两笔缴税的总金额,以及两次缴税的间隔天数
以下代码适配MySQL 8.0+、PostgreSQL等支持窗口函数的主流数据库:
WITH target_user AS ( SELECT t1.user_id FROM table1 t1 INNER JOIN table2 t2 ON t1.user_id = t2.user_id WHERE t2.product_id = 12 GROUP BY t1.user_id HAVING MAX(t1.tax_date) = STR_TO_DATE('19/06/2022', '%d/%m/%Y') ), user_recent_tax AS ( SELECT user_id, tax_amount, tax_date, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY tax_date DESC) AS rn FROM table1 WHERE user_id IN (SELECT user_id FROM target_user) ) SELECT user_id, SUM(tax_amount) AS total_tax_amount, DATEDIFF(MAX(tax_date), MIN(tax_date)) AS tax_interval_days FROM user_recent_tax WHERE rn <= 2 GROUP BY user_id;
适配提示:如果用SQL Server,把日期差函数替换为
DATEDIFF(day, MIN(tax_date), MAX(tax_date)),字符串转日期函数对应替换为库内支持的格式即可;如果日期字段本身就是日期类型,直接去掉STR_TO_DATE函数写对应日期值就行。
内容的提问来源于stack exchange,提问作者wassidi
相关产品推荐
相关产品推荐

