gpt4 book ai didi

sql-server - 带子运行总计的递归 SQL 查询

转载 作者:行者123 更新时间:2023-12-03 09:23:29 25 4
gpt4 key购买 nike

我有一张类似这样的 table

create table installs (datetime date,installs int);
insert into installs (date, installs)
values
('10-01-2014', 2),
('10-02-2014', 4),
('10-03-2014', 1),
('10-04-2014', 10)

所以我们的表格数据看起来像这样

Table Data

鉴于此表,我想要一个可以生成几天内安装计数的查询。

所以我正在寻找的结果集是

Result Set

例如,查看 10/2/2014 天的记录。

day_out=0 有 4 次安装。在那之后的一天 (days_out=1),现在总共有 5 次安装(10/2 中有 4 次安装,10/3 中有 1 次安装)此后的第二天 (days_out=2),总安装次数为 15 次(前 2 天有 5 次,第 4 日有 10 次新安装)

我之前在一个更大的查询中很容易地做到了这一点,只是使用内部选择来获取安装计数(当场对它们求和),但是,这不再是削减它......所以我能想到的唯一解决方案的目的是创建一个值表,然后将其与更大的查询连接起来。

我编写此查询时遇到的唯一问题是我不知道如何执行:)。

如果有人能为这个问题想出一个更好的标题,我会更改它,当我不确定该朝哪个方向发展时,很难命名这个标题。

最佳答案

这个递归 CTE 应该可以解决问题。

WITH cte AS(
SELECT date, 0 AS days_out, installs
FROM installs
UNION ALL
SELECT cte.date, cte.days_out + 1, cte.installs + i.installs
FROM cte
INNER JOIN installs i ON cte.date = DATEADD(DAY, -1 * (cte.days_out + 1), i.date)
)
SELECT *
FROM cte
ORDER BY date, days_out

关于sql-server - 带子运行总计的递归 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26555513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com