sql - 在给定时间范围内将结果转换为每小时计数
问题描述
我正在尝试编写一个查询以从表数据中获得以下结果:
- 结果应该在给定的时间范围内以每小时数据进行分解。
- 去年同一时间范围内的购买数量
- 3 或 1 周/秒前同一时间范围内的购买计数
- 第 1 列与 YOY 的差异百分比(同比趋势)
- 与 WOW 相比,第 1 列的差异百分比(每周趋势)
由于我是初学者,我可以编写查询来获取数据的数据,但我不能将销售额分解为每小时数据。另外,我想将销售额与同一时间范围内的 YOY 和 WOW 数据进行比较。
这是提取当天数据的查询。
select COUNT(*) Order_Count_For_The_Day
FROM
purchase_Mobile
WHERE
CREATE_DATE between to_date('01/02/2018 00:00:00','mm/dd/yyyy hh24:mi:ss') and to_date('01/02/2018 23:59:59','mm/dd/yyyy hh24:mi:ss')
AND status_code >= 99;
有人可以更改查询并帮助我获得上述几点中提到的所需输出,我会非常感谢你的一生吗?
我已经尝试从给定表中提取数据,并且可以提取特定时间段的数据。
select COUNT(*) Order_Count_For_The_Day
FROM
purchase_Mobile
WHERE
CREATE_DATE between to_date('01/02/2018 00:00:00','mm/dd/yyyy hh24:mi:ss') and to_date('01/02/2018 23:59:59','mm/dd/yyyy hh24:mi:ss')
AND status_code >= 99;
- 结果应该在给定的时间范围内以每小时数据分解。
- 去年同一时间范围内的购买数量
- 3 或 1 周/秒前同一时间范围内的购买计数
- 第 1 列与 YOY 的差异百分比(同比趋势)
- 第 1 列与 WOW 相比的差异百分比(每周趋势)
解决方案
为了获取每小时信息,您可以使用 datepart(HH,Create_Date)。然后使用每小时信息的 GROUP BY。
SELECT COUNT(CREATE_DATE) Order_Count_For_The_Day
,datepart(HH,CREATE_DATE) Order_Hour
,MAX(CREATE_DATE) CurrentDate
FROM purchase_Mobile
CREATE_DATE between to_date('01/02/2018 00:00:00','mm/dd/yyyy hh24:mi:ss') and to_date('01/02/2018 23:59:59','mm/dd/yyyy hh24:mi:ss')
AND status_code >= 99;
GROUP BY datepart(HH,CREATE_DATE)
为了做今年,去年,其他时间框架 - 我将它们分成自己的临时表并最终加入它们。您需要为此调整一些问题(没有销售的时间,关闭的时间等,我如何做到这一点不会出现)但想让您有一些选择开始:
DECLARE @StartDate DateTime = '2018-1-2 00:00:00'
DECLARE @EndDate DateTime = '2018-1-2 23:59:00'
DECLARE @CurrentResults Table
(OrderCount INT
,OrderHour INT
,CurrentDate DATETIME)
INSERT INTO @CurrentResults
SELECT COUNT(CREATE_DATE) Order_Count_For_The_Day
,datepart(HH,CREATE_DATE) Order_Hour
,MAX(CREATE_DATE) CurrentDate
FROM purchase_Mobile
WHERE CREATE_DATE BETWEEN @StartDate AND @EndDate
AND status_code >= 99
GROUP BY datepart(HH,CREATE_DATE)
OPTION (RECOMPILE);
DECLARE @LastYearResults Table
(LastYearOrderCount INT
,LastYearOrderHour INT
,LastYearDate DATETIME)
INSERT INTO @LYResults
SELECT COUNT(CREATE_DATE) LastYearOrderCount
,datepart(HH,CREATE_DATE) LastYearOrderHour
,MAX(CREATE_DATE) LastYearDate
FROM purchase_Mobile
WHERE CREATE_DATE BETWEEN @StartDate-365 AND @EndDate-365
AND status_code >= 99
GROUP BY datepart(HH,CREATE_DATE)
OPTION (RECOMPILE);
DECLARE @LastWeekResults Table
(LastWeekOrderCount INT
,LastWeekOrderHour INT
,LastWeekDate DATETIME)
INSERT INTO @LastWeekResults
SELECT COUNT(CREATE_DATE) Order_Count
,datepart(HH,CREATE_DATE) Order_Hour
,MAX(CREATE_DATE) LastWeekDate
FROM purchase_Mobile
WHERE CREATE_DATE BETWEEN @StartDate-7 AND @EndDate-7
AND status_code >= 99
GROUP BY datepart(HH,CREATE_DATE)
OPTION (RECOMPILE);
Select CR.OrderHour
,CR.OrderCount
,LY.LastYearOrderCount
,LW.LastWeekOrderCount
,CR.CurrentDate
,LY.LastYearDate
,LW.LastWeekDate
FROM @CurrentResults As CR
LEFT JOIN @LastYearResults AS LY ON LY.LastYearOrderHour = CR.OrderHour
LEFT JOIN @LastWeekResults AS LW ON LW.LastWeekOrderHour = CR.OrderHour
ORDER BY CR.OrderHour
推荐阅读
- angular - 问题:在 [attr.aria-label] 中插入条件
- reactjs - Reactjs 中的 Crud 更新操作不起作用
- python - 从 google book api 获取缩略图到 python 变量
- reactjs - 您可以将 React useState 状态对象传递给使用 Tailwind 和 twin.macro 的样式化组件吗?
- c# - 尝试修复此 dataGridView 列 Autosizemode 问题
- reactjs - 单击 React 中的按钮后创建 PDF 文档
- angular - 如何使用 0 值的角度 DatePipe?
- kivy - Kivy:如何摆脱 TextInput 中奇怪的阴影外观?
- wcf - 签署认证请求
- r - 在 Shiny 中,是否可以提取与给定值不同的输入值(即,将百分比转换为小数)?