午夜按小时分组的SQL Server
我在使用跨越午夜的“按小时分组”时遇到了问题。我需要按照小时的顺序对结果进行排序,但是返回的值列出了前几天小时之前的当前天“小时” 样本表:午夜按小时分组的SQL Server,sql,sql-server,sorting,group-by,sql-order-by,Sql,Sql Server,Sorting,Group By,Sql Order By,我在使用跨越午夜的“按小时分组”时遇到了问题。我需要按照小时的顺序对结果进行排序,但是返回的值列出了前几天小时之前的当前天“小时” 样本表: DATE LINE_NUMBER TOTAL 2019-12-03 20:38:35 1 150 2019-12-03 20:38:35 2 200 2019-12-03 20:54:35 1 175 2019-12-03 20:54:35 2 2
DATE LINE_NUMBER TOTAL
2019-12-03 20:38:35 1 150
2019-12-03 20:38:35 2 200
2019-12-03 20:54:35 1 175
2019-12-03 20:54:35 2 210
2019-12-03 23:58:35 1 125
2019-12-03 23:58:35 2 250
2019-12-04 00:52:35 1 155
2019-12-04 00:52:35 2 205
2019-12-04 01:32:35 1 125
2019-12-04 01:32:35 2 275
2019-12-04 01:52:35 1 145
2019-12-04 01:52:35 2 225
当前SQL查询:
SELECT sum([TOTAL]) as HOURLY_TOTAL, LINE_NUMBER as LINE_NUMBER
FROM PRODUCTION_LINES
WHERE Date > '12/03/2019 15:30:00'
GROUP BY DATEPART(HOUR, [Date]), LINE_NUMBER
当前SQL结果:
HOURLY_TOTAL LINE_NUMBER
155 1 (Data from current day)
270 1 (Data from current day)
325 1 (Data from previous day)
125 1 (Data from previous day)
205 2 (Data from current day)
500 2 (Data from current day)
410 2 (Data from previous day)
250 2 (Data from previous day)
这是我真正需要的顺序:
HOURLY_TOTAL LINE_NUMBER
325 1 (Data from previous day)
125 1 (Data from previous day)
410 2 (Data from previous day)
250 2 (Data from previous day)
155 1 (Data from current day)
270 1 (Data from current day)
205 2 (Data from current day)
500 2 (Data from current day)
在网上搜索线索后,看起来其他人的问题比我的复杂得多,所以我没有看到任何适合我情况的解决方案。你可以
按表达式排序:
SELECT sum([TOTAL]) as HOURLY_TOTAL, LINE_NUMBER as LINE_NUMBER
FROM PRODUCTION_LINES
WHERE Date > '12/03/2019 15:30:00'
GROUP BY DATEPART(HOUR, [Date]), LINE_NUMBER
ORDER BY MIN(Date);
事实上,我不太确定是否应该包括行号
。您可能需要:
ORDER BY MIN(CONVERT(DATE, Date)), LINE_NUMBER;
谢谢大家!!最终,解决方案与您的第二个OrderBy建议略有不同,即:
ORDER BY LINE_NUMBER, MIN(CONVERT(DATE, Date));
我只需要交换OrderBY子句中的行号和日期,就可以得到我需要的东西。感谢您的快速建议谢谢!最终的解决方案是对您的第二个OrderBy建议的一个细微的变化,即:按行_编号,MIN(CONVERT(DATE,DATE))排序;我只需要交换OrderBY子句中的行号和日期,就可以得到我需要的东西。谢谢你的快速建议