gpt4 book ai didi

sql - 如何填补空白?

转载 作者:行者123 更新时间:2023-12-05 01:08:40 25 4
gpt4 key购买 nike

假设我有两条记录,都有日期和计数:

--Date--                   --Count--
2011-09-20 00:00:00 5
2011-09-16 00:00:00 8

您将如何选择它来填补时间间隔,始终采用上一个记录?

所以输出将是:
--Date--                   --Count--
2011-09-20 00:00:00 5
2011-09-19 00:00:00 8
2011-09-18 00:00:00 8
2011-09-17 00:00:00 8
2011-09-16 00:00:00 8

我还想不出一个巧妙的解决方案。
我想这可以用 DATEDIFF 和 for 循环来完成,但我希望这可以更容易地完成。

最佳答案

您有 2 个要解决的问题。第一个问题是如何填补空白。第二个问题是为那些丢失的记录填充计数字段。

问题 1:这可以通过使用 Dates Lookup table 来解决。或通过创建 recursive common table expression .如果这是一个选项,我会建议为此创建一个日期查找表。如果您无法创建这样的表,那么您将需要这样的东西。

WITH CTE AS (
SELECT MAX(dt) maxdate, MIN(dt) mindate
FROM yourtable
),
RecursiveCTE AS (
SELECT mindate dtfield
FROM CTE
UNION ALL
SELECT DATEADD(day, 1, dtfield)
FROM RecursiveCTE R
JOIN CTE T
ON R.dtfield < T.maxdate
)

这应该会为您创建一个以 MIN 开头的日期列表。表中的日期并以 MAX 结尾.

问题 2:这里是 correlated subquery会派上用场(就像我通常远离它们一样)从原始表中获取最后一个 cnt:
SELECT r.dtfield, 
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r
  • SQL Fiddle Demo
  • 关于sql - 如何填补空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16819365/

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