我想知道您将如何在X天(以及其他受支持的 def all_trials(request):
return HttpResponseRedirect(URL_TO_XML_IN_STATIC)
期间)对记录进行分组。
使用以下查询,我发现了按天/月/ ...分组的两种方法:
DATEPART
我希望这和增加查询中的数字0一样容易,但这似乎行不通。是否有一个简单的解决方案,因为我在网上找不到任何示例?
另一个要求是,应将句点的开始(和-如果容易的话,结束)添加为列(类型:dateTime)。
有人可以用这个方法将我推向正确的方向吗?
谢谢。
编辑:
这个问题可能解释得不是很好,给出的答案确实对我有进一步的帮助。如果再次遇到问题,我将针对我的具体用例发布另一个问题。
答案 0 :(得分:1)
如果要按天段(或其他日期部分)分组,则可以使用算术:
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 DATEADD(DAY, 0, 10 * FLOOR(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;
答案 1 :(得分:0)
您可以使用Aggregate Window Functions在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