【问题标题】:Based on previous records, stop sum fields根据以前的记录,停止总和字段
【发布时间】:2022-01-06 19:09:57
【问题描述】:

我有一张这样的桌子:

|id |   date     | point |
+---+------------+-------+
| 6 | 2022/01/06 |   9   |
| 5 | 2022/01/05 |   7   |
| 4 | 2022/01/04 |   1   |
| 3 | 2022/01/03 |   4   |
| 2 | 2022/01/02 |   6   |
| 1 | 2022/01/01 |   1   |

我的目标是从现在到日期获取points 中的sum,该点大于等于1,并停止该日期之前的字段总和。

在上面的示例中(按日期排序),答案是 sum of points date now(2022/01/06) 到日期 2022/01/04 和等于 9 + 7 + 1 = 17。因为日期2022/01/03的点值等于4,所以不在sum中计算。

我阅读了有关 CTEWindow Functoin 的信息,但是我无法正确实现它们。

【问题讨论】:

  • 您使用的是什么数据库和版本?
  • @Schwern Postgres 数据库和最新版本

标签: sql postgresql postgresql-14


【解决方案1】:
  1. 查找点值为 1 的所需日期之前(包括)的第一行。
  2. 总结该日期以及比它更新的所有内容,直到(包括)所需日期。
select sum(point)
from points
where date between (
  select "date"
  from points
  where point = 1 and date <= '2022/01/06'
  order by "date" desc
  limit 1
) and '2022/01/06';

Demonstration

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    相关资源
    最近更新 更多