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

如何编写SQL查询仅提取各账户首12个月的交易数据?

提取账户首次交易12个月内的交易数据

要实现这个需求,核心思路是先计算每个账户的首次交易日期,再筛选出该日期往后12个月内的所有交易记录。下面是不同SQL数据库的通用实现方案:

通用SQL逻辑(窗口函数版)

使用窗口函数MIN() OVER (PARTITION BY Account)可以高效获取每个账户的最早交易日期,无需额外子查询或关联操作:

SELECT 
    Account,
    `Date`
FROM (
    SELECT 
        Account,
        `Date`,
        -- 计算当前账户的首次交易日期
        MIN(`Date`) OVER (PARTITION BY Account) AS first_transaction_date
    FROM Transactions
) AS subquery
-- 筛选交易日期在首次交易日期起12个月内的记录
WHERE `Date` <= DATE_ADD(first_transaction_date, INTERVAL 1 YEAR)
-- 若需要排除首次交易满12个月当天的记录,改用:
-- WHERE `Date` < DATE_ADD(first_transaction_date, INTERVAL 1 YEAR)

不同数据库的日期函数适配

不同数据库对日期加减的语法略有差异,这里给出主流数据库的写法:

MySQL/MariaDB

WHERE `Date` <= DATE_ADD(first_transaction_date, INTERVAL 1 YEAR)

PostgreSQL

WHERE "Date" <= first_transaction_date + INTERVAL '1 year'

SQL Server

WHERE [Date] <= DATEADD(YEAR, 1, first_transaction_date)

Oracle

WHERE "Date" <= ADD_MONTHS(first_transaction_date, 12)

针对示例数据的验证结果

结合你提供的示例数据:

  • Apples的首次交易日期是2022-01-01,12个月后为2023-01-01,因此注释的2023-01-01和2023-07-01会被排除;
  • Bananas的首次交易日期是2022-05-01,12个月后为2023-05-01,所有现有记录都在范围内;
  • Oranges的首次交易日期是2023-01-01,现有记录均在12个月窗口内,会全部保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:05:16