sql - 我需要使用创建日期获取前 5 天和 6-10 天的数据
问题描述
如标题所示,我需要获取前 5 天、6-10 天的数据。我有 3 个参数:开始日期、结束日期、用户
我有创建日期的数据如下
Createdate
----------------
2019-11-01
2019-11-04
2019-11-05
2019-11-10
2019-11-21
2019-11-30
因此,正如您在上面看到的,我们在前 5 天有 3 个日期,在 6-10 天有 1 个日期。
我用下面的查询
Select count(date)
from Data
Where cast(cdate as date) between cast(cdate as date)
and dateadd(day,5,cdate) Group by cdate
Expected results
-------------
Date First 5 6-10
---- ----- ----
2019-11-01 1
2019-11-04 1
2019-11-05 1
2019-11-10 0 1
但我在前 5 天得到了所有数据,而不是只有 3 天。请任何一位帮助
解决方案
如果我理解正确,下一条语句可能会有所帮助:
桌子:
CREATE TABLE Data (
CreateDate date
)
INSERT INTO Data
(CreateDate)
VALUES
('20191101'),
('20191104'),
('20191105'),
('20191110'),
('20191121'),
('20191130')
陈述:
SELECT
CreateDate,
CASE WHEN DATEDIFF(day, FIRST_VALUE(CreateDate) OVER (ORDER BY CreateDate ASC), CreateDate) / 5 = 0 THEN 1 END AS [First 5 Days],
CASE WHEN DATEDIFF(day, FIRST_VALUE(CreateDate) OVER (ORDER BY CreateDate ASC), CreateDate) / 5 = 1 THEN 1 END AS [6-10 Days],
CASE WHEN DATEDIFF(day, FIRST_VALUE(CreateDate) OVER (ORDER BY CreateDate ASC), CreateDate) / 5 > 1 THEN 1 END AS [More Days]
FROM Data
结果:
CreateDate First 5 Days 6-10 Days More Days
2019-11-01 1 NULL NULL
2019-11-04 1 NULL NULL
2019-11-05 1 NULL NULL
2019-11-10 NULL 1 NULL
2019-11-21 NULL NULL 1
2019-11-30 NULL NULL 1
如果您有重复日期的行,请使用下一条语句:
SELECT
CreateDate,
SUM([First 5 Days]) AS [First 5 Days],
SUM([6-10 Days]) AS [6-10 Days],
SUM([More Days]) AS [More Days]
FROM (
SELECT
CreateDate,
CASE WHEN DATEDIFF(day, FIRST_VALUE(CreateDate) OVER (ORDER BY CreateDate ASC), CreateDate) / 5 = 0 THEN 1 END AS [First 5 Days],
CASE WHEN DATEDIFF(day, FIRST_VALUE(CreateDate) OVER (ORDER BY CreateDate ASC), CreateDate) / 5 = 1 THEN 1 END AS [6-10 Days],
CASE WHEN DATEDIFF(day, FIRST_VALUE(CreateDate) OVER (ORDER BY CreateDate ASC), CreateDate) / 5 > 1 THEN 1 END AS [More Days]
FROM Data
) t
GROUP BY CreateDate
推荐阅读
- regex - Apache rewriter - 无扩展名文件的复杂重写器
- haskell - 如何将这个封闭类型族与依赖类型类结合起来
- javascript - Vue.js - DataTable:显示数据,但第一行在渲染数据后显示消息“表中没有可用数据”
- mysql - 读取数百万个小文件并使用 Nodejs 插入 mysql
- c++ - CMakeLists.txt:(add_executable):没有给目标的源:教程
- html - CSS Toggle 手风琴表演奇怪,想法?
- algorithm - 单纯形算法:初始化-单纯形
- sql-server - 为什么 CROSS APPLY *not* 在此查询中出现无效列错误?
- python - 删除重复数据框熊猫
- python - 如何在没有交叉验证的情况下检查机器学习的准确性