按X小时/天/周划分的SQL Server组
我想知道您如何能够按X天(以及其他受支持的按X小时/天/周划分的SQL Server组,sql,sql-server,Sql,Sql Server,我想知道您如何能够按X天(以及其他受支持的DATEPARTperiods)对记录进行分组 我找到了两种方法来按天/月/分组。。。使用以下查询: /** Group by one day method 1 **/ SELECT SUM(Id) AS Id, DATEADD(DAY, 0, DATEDIFF(DAY, 0, DateTime)) AS DateTime FROM Reporting GROUP BY DATEADD(DAY, 0, DATED
DATEPART
periods)对记录进行分组
我找到了两种方法来按天/月/分组。。。使用以下查询:
/** Group by one day method 1 **/
SELECT
SUM(Id) AS Id,
DATEADD(DAY, 0, DATEDIFF(DAY, 0, DateTime)) AS DateTime
FROM
Reporting
GROUP BY
DATEADD(DAY, 0, DATEDIFF(DAY, 0, DateTime))
ORDER BY
DateTime DESC
/** Group by one day method 2 **/
SELECT
SUM(Id) AS Id,
MIN(DATEADD(DAY, 0, DATEDIFF(DAY, 0, DateTime))) AS DateTime
FROM
Reporting
GROUP BY
DATEPART(YEAR, DateTime),
DATEPART(MONTH, DateTime),
DATEPART(DAY, DateTime)
ORDER BY
DateTime DESC
我希望它会像增加查询中的数字0一样简单,但这似乎不起作用。有没有一个简单的解决办法,因为我在网上找不到任何例子
另一个要求是,周期的开始(如果容易的话,还有结束)应添加为列(类型:dateTime)
有人能用这个把我推向正确的方向吗
提前谢谢
编辑:
这个问题可能解释得不是很好,给出的答案确实帮助了我。如果我再次陷入困境,我将在我的特定用例中发布另一个问题。如果您想按天数(或其他日期部分)分组,可以使用算术:
SELECT DATEADD(DAY, 0, 10 * (DATEDIFF(DAY, 0, DateTime) / 10) ) as DateTime,
SUM(Id) as Id
FROM Reporting
GROUP BY DATEADD(DAY, 0, DATEDIFF(DAY, 0, DateTime))
ORDER BY MIN(DateTime) DESC;
SQL Server执行整数除法,因此这会将日期截断为小于该值10的倍数(或任意值)。使用floor
()`,您可以更清楚一点:
可以使用隔离select语句中的分组逻辑。下面是一个完整的示例:
DECLARE @table TABLE (id INT IDENTITY(1,1), dt DATETIME)
;WITH cte AS (
SELECT GETDATE() dt
UNION ALL
SELECT DATEADD(MINUTE, -10, dt)
FROM cte
WHERE dt > GETDATE() - 10
)
INSERT INTO @table (dt)
SELECT * FROM cte
OPTION (MAXRECURSION 0);
SELECT
CAST(dt AS DATE) AS DayPart,
COUNT(*) OVER (PARTITION BY CAST(dt AS DATE), 0) AS DayCount,
DATEADD(HOUR, DATEDIFF(HOUR, 0, dt), 0) AS HourPart,
COUNT(*) OVER (PARTITION BY DATEADD(HOUR, DATEDIFF(HOUR, 0, dt), 0)) AS HourCount,
dt
FROM @table
返回:
DayPart DayCount HourPart HourCount dt
2018-07-06 82 2018-07-06 10:00:00.000 4 2018-07-06 10:57:16.887
2018-07-06 82 2018-07-06 10:00:00.000 4 2018-07-06 10:47:16.887
2018-07-06 82 2018-07-06 10:00:00.000 4 2018-07-06 10:37:16.887
2018-07-06 82 2018-07-06 10:00:00.000 4 2018-07-06 10:27:16.887
2018-07-06 82 2018-07-06 11:00:00.000 6 2018-07-06 11:57:16.887
2018-07-06 82 2018-07-06 11:00:00.000 6 2018-07-06 11:47:16.887
2018-07-06 82 2018-07-06 11:00:00.000 6 2018-07-06 11:37:16.887
2018-07-06 82 2018-07-06 11:00:00.000 6 2018-07-06 11:27:16.887
... etc
样本数据和期望的结果将非常有用。“x天分组”是什么意思?你的问题不清楚。如果您想按2天分组,并且连续3天有记录,那么哪两天应该分组在一起?tnx@gordon linoff
DayPart DayCount HourPart HourCount dt
2018-07-06 82 2018-07-06 10:00:00.000 4 2018-07-06 10:57:16.887
2018-07-06 82 2018-07-06 10:00:00.000 4 2018-07-06 10:47:16.887
2018-07-06 82 2018-07-06 10:00:00.000 4 2018-07-06 10:37:16.887
2018-07-06 82 2018-07-06 10:00:00.000 4 2018-07-06 10:27:16.887
2018-07-06 82 2018-07-06 11:00:00.000 6 2018-07-06 11:57:16.887
2018-07-06 82 2018-07-06 11:00:00.000 6 2018-07-06 11:47:16.887
2018-07-06 82 2018-07-06 11:00:00.000 6 2018-07-06 11:37:16.887
2018-07-06 82 2018-07-06 11:00:00.000 6 2018-07-06 11:27:16.887
... etc