表格如下
column1 column2 timestamp
-----------------------------------------
1 1 2017-09-05 15:09:57.811
执行此查询
SELECT
SUM(column1) column1, SUM(column2) column2, roundDate,
COUNT(*) recordCount
FROM
(SELECT
column1, column2,
DATEADD(second, FLOOR(((DATEDIFF(second, '20000101', DATEADD(MINUTE, 480, timestamp)) / 2592000) * 2592000)), '20000101') AS roundDate
FROM
tablename
WHERE
(column1 > 0 OR column2 > 0)
AND DATEADD(MINUTE, 480, timestamp) BETWEEN '2017-09-01 07:30:00'
AND '2017-09-30 07:30:00'
AND CAST(DATEADD(MINUTE, 480, timestamp) AS time) BETWEEN '07:30' AND '19:30') t
GROUP BY
roundDate
ORDER BY
roundDate
注意:2592000
是区间值,可根据用户选择(1分钟,3分钟,10分钟,每周,每月和每季度)进行更改
当前结果
column1 column2 roundDate recordCount
----------------------------------------------------------
45 627 2017-08-29 00:00:00.000 212
480 334 2017-09-28 00:00:00.000 830
正如您所看到的,结果中的roundDate
错误,因为它回到了8月并且从9月开始检测到某些天。它应该遵循where子句条件BETWEEN '2017-09-01 07:30:00' AND'2017-09-30 07:30:00'
并仅返回一个记录。
预期结果
column1 column2 roundDate recordCount
-----------------------------------------------------------
525 961 2017-09-29 00:00:00.000 1042
此查询有什么问题?
答案 0 :(得分:0)
如果您想在日历月过滤,则应该这样做。您的查询目前正在做的是将时间分为自2000-01-01以来的30天切片。我希望2017-08-29是其中一个片段的开始。