如何用SQL查询累计交易额达到阈值的日期?
用SQL查询累计交易额达到指定值的日期
给定数据表:
| day | amount |
|---|---|
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
要找到累计交易额首次达到30的日期(示例中为第2天),确实可以用窗口函数实现,具体步骤如下:
1. 计算每日累计交易额
使用SUM()窗口函数,按日期顺序累加交易额,得到每天的累计值:
SELECT day, amount, SUM(amount) OVER (ORDER BY day) AS cumulative_amount FROM your_table_name;
执行后会得到:
| day | amount | cumulative_amount |
|---|---|---|
| 1 | 10 | 10 |
| 2 | 20 | 30 |
| 3 | 30 | 60 |
2. 筛选并获取目标日期
基于上面的结果,筛选出累计值≥30的记录,再取最小的日期即可:
SELECT MIN(day) AS target_day FROM ( SELECT day, SUM(amount) OVER (ORDER BY day) AS cumulative_amount FROM your_table_name ) AS cumulative_data WHERE cumulative_amount >= 30;
如果需要同时查看当天的交易额和累计值,可以用LIMIT 1直接取第一条满足条件的记录:
SELECT day, amount, cumulative_amount FROM ( SELECT day, amount, SUM(amount) OVER (ORDER BY day) AS cumulative_amount FROM your_table_name ) AS cumulative_data WHERE cumulative_amount >= 30 ORDER BY day LIMIT 1;
说明
SUM(amount) OVER (ORDER BY day)是核心:窗口函数按day升序排列,对每行及之前的所有amount求和,得到累计交易额。- 替换
your_table_name为实际的数据表名称即可运行。
内容的提问来源于stack exchange,提问作者nkt
相关产品推荐
相关产品推荐

