You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询指定客户多时段交易总额(返回单行)

查询指定客户多时间段交易总额

假设存在采购交易表(示例中表名可设为PurchaseTransactions),包含字段:

  • CustId:客户ID
  • Amount:交易金额
  • DatePosted:交易时间(DATETIME类型)

需编写SELECT语句,针对特定CustId返回单行结果,包含该客户的近3天、近60天、近1年、近2年交易总额。


示例交易表

CustIdAmountDatePosted
1234698.022023-01-23 12:34:56
1234582.692022-12-15 19:57:23
12347775.222022-12-02 02:34:32
123418.722022-01-23 12:34:56
12342.272021-01-23 12:34:56

预期查询结果(CustId=1234)

CustId3-day Total60-day Total1 year Total2 year Total
1234698.029055.939074.659076.92

解决方案

使用条件聚合实现,通过SUM()结合CASE WHEN筛选不同时间范围的交易金额,确保返回单行统计结果。

SQL语句(以SQL Server为例)

SELECT
    CustId,
    SUM(CASE WHEN DatePosted >= DATEADD(day, -3, GETDATE()) THEN Amount ELSE 0 END) AS [3-day Total],
    SUM(CASE WHEN DatePosted >= DATEADD(day, -60, GETDATE()) THEN Amount ELSE 0 END) AS [60-day Total],
    SUM(CASE WHEN DatePosted >= DATEADD(year, -1, GETDATE()) THEN Amount ELSE 0 END) AS [1 year Total],
    SUM(CASE WHEN DatePosted >= DATEADD(year, -2, GETDATE()) THEN Amount ELSE 0 END) AS [2 year Total]
FROM PurchaseTransactions
WHERE CustId = 1234
GROUP BY CustId;

不同数据库适配说明

如果使用其他数据库,需调整时间计算函数:

  • MySQL:替换DATEADD(day, -3, GETDATE())为DATE_SUB(NOW(), INTERVAL 3 DAY)
  • PostgreSQL:替换为CURRENT_TIMESTAMP - INTERVAL '3 days'
  • Oracle:替换为SYSDATE - 3(天数)或ADD_MONTHS(SYSDATE, -12)(年数)

逻辑说明

  • CASE WHEN判断交易时间是否落在目标时间范围内,符合条件则累加对应Amount,否则加0
  • GROUP BY CustId确保结果按客户分组,最终返回单行统计数据

内容的提问来源于stack exchange,提问作者Portaljacker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:10:23