我有sql表 BaseData
(数值单位: value
列(随机):
------------------------------------------------------
| Date | Value | Day | Moth | Year |
------------------------------------------------------
| 01-07-2020 | 1 | 1 | 7 | 2020 |
| 02-07-2020 | 2 | 2 | 7 | 2020 |
| 03-07-2020 | 3 | 3 | 7 | 2020 |
| 04-07-2020 | 4 | 4 | 7 | 2020 |
| 05-07-2020 | 5 | 5 | 7 | 2020 |
| 06-07-2020 | 6 | 6 | 7 | 2020 |
| 07-07-2020 | 7 | 7 | 7 | 2020 |
| 08-07-2020 | 8 | 8 | 7 | 2020 |
| 09-07-2020 | 9 | 9 | 7 | 2020 |
| 10-07-2020 | 10 | 10 | 7 | 2020 |
------------------------------------------------------
我需要的是,从 BaseData
在某种程度上,对于每一行,我将得到 Values
从最近7天开始(不包括当天)。
例如,对于7月8日,我们应该有7月1日和7月7日之间的值之和。
例如,这应该是我对上面给定示例的结果表:
----------------------------
| Date | ResultSum |
----------------------------
| 01-07-2020 | 0 | //assuming this is the first record
| 02-07-2020 | 1 | //SUM = 1
| 03-07-2020 | 3 | //SUM = 1 + 2
| 04-07-2020 | 6 | //SUM = 1 + 2 + 3
| 05-07-2020 | 10 | //SUM = 1 + 2 + 3 + 4
| 06-07-2020 | 15 | //SUM = 1 + 2 + 3 + 4 + 5
| 07-07-2020 | 21 | //SUM = 1 + 2 + 3 + 4 + 5 + 6
| 08-07-2020 | 28 | //SUM = 1 + 2 + 3 + 4 + 5 + 6 + 7
| 09-07-2020 | 35 | //SUM = 2 + 3 + 4 + 5 + 6 + 7 + 8
| 10-07-2020 | 42 | //SUM = 3 + 4 + 5 + 6 + 7 + 8 + 9
----------------------------
到目前为止我得到的是:
SELECT Date,
(SELECT SUM(nestedTable.Value)
FROM BaseData AS nestedTable
WHERE DATEADD(dd, DATEDIFF(dd, 0, Date), 0) BETWEEN
DATEADD(day, DATEDIFF(day, 0, DATEADD(d,-1, Date)), 0) AND
DATEADD(day, DATEDIFF(day, 0, DATEADD(d,-8, Date)), 0)
) AS ResultSum
FROM BaseData
但似乎不起作用。我在这里发现了一些类似的问题,但我不知道如何在这里使用这些答案。
1条答案
按热度按时间mklgxw1f1#
只需使用窗口函数。假设表中的日期是连续的,您将执行以下操作:
在不支持
rows
对于窗口函数,可以使用相关子查询或横向联接:此查询将利用
date
列-并且它具有处理非连续日期的优点。两个查询都假定日期存储为数据类型
date
(或诸如此类)-如果不是这样,你需要cast()
首先是他们(或者更好的是。。。修复数据模型!)。