SQL Hours如何按开始时间排序

时间:2017-01-25 20:09:34

标签: sql sql-server datetime

我有一个返回数据,数量和小时的查询。它是全年所有销售额的总和。我试图实现像谷歌忙碌的时间。我挣扎的是订购时间。我不想要0-24,我想要的是06-05。所以开始时间早上6点就说,结束时间早上5点。做了像Select Sum(Qty), Datepart(hh, saletime)这样的事情。然后按销售分组。

按销售时间订购,并获得0,1,2,3,4等小时数,但我要花6小时或其他明确的开始时间开始。

有人帮忙吗?

2 个答案:

答案 0 :(得分:2)

您可以通过执行CASE语句来声明自己的排序顺序,该语句会在6之前的任何内容中添加24小时。

在这里,我将它作为一个列包含在内,以便您可以看到它实际上在做什么:

SELECT 
    Sum(Qty) as [Sum], 
    Datepart(hour, saletime) AS [Hour], 
    CASE 
        WHEN Datepart(hour, saletime) >= 6 THEN Datepart(hour, saletime)
        ELSE Datepart(hour, saletime) + 24 
    END AS [SortOrder]
FROM
    MyTable
ORDER BY
    SortOrder

<强>输出:

Sum    Hour     SortOrder
2      6        6
3      7        7
17     8        8
--     --       --   Skipping rows for brevity
18     3        27
13     4        28
2      5        29

但如果您不希望将SortOrder作为列,只需将其移至ORDER BY

SELECT 
    Sum(Qty) as [Sum], 
    Datepart(hour, saletime) AS [Hour]
FROM
    MyTable
ORDER BY
    CASE 
        WHEN Datepart(hour, saletime) >= 6 THEN Datepart(hour, saletime) 
        ELSE Datepart(hour, saletime) + 24 
    END

编辑:对问题本身进行Aaron Bertrand's评论,我已将查询更新为使用hour而不是hh。他提供的资源可以是seen here

答案 1 :(得分:0)

您可以使用modula公式进行排序:

select sum(qty), datepart(hour, saletime)
from sales
group by datepart(hour, saletime)
order by (datepart(hour, saletime) + 19) % 24