Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
午夜按小时分组的SQL Server_Sql_Sql Server_Sorting_Group By_Sql Order By - Fatal编程技术网

午夜按小时分组的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子句中的行号和日期,就可以得到我需要的东西。谢谢你的快速建议