MSSQL订单前7天

时间:2015-09-11 22:31:22

标签: sql-server

我在MSSQL中运行此查询以获取项目,在一周的最后7天进行分组:

SELECT COUNT(Date_Entered), DATENAME(WEEKDAY, Date_Entered)  
    FROM my_table
    WHERE Board_Name = 'Board'
      AND DATEDIFF(DAY,Date_Entered,GETDATE()) <= 7
  GROUP BY DATENAME(WEEKDAY, Date_Entered)

在结果中,星期几按字母顺序排序:星期五&gt;周一&gt;周六&gt;周日&gt;星期四&gt;周二&gt;星期三

如何按正常/正确/常识顺序排序,从7天前的工作日开始到昨天结束?

3 个答案:

答案 0 :(得分:1)

DATEPART是你的朋友,试试这样:

SELECT COUNT(Date_Entered), DATENAME(WEEKDAY, Date_Entered),DATEPART(WEEKDAY,Date_Entered)  
    FROM my_table
    WHERE Board_Name = 'Board'
      AND DATEDIFF(DAY,Date_Entered,GETDATE()) <= 7
  GROUP BY DATEPART(WEEKDAY,Date_Entered),DATENAME(WEEKDAY, Date_Entered)
ORDER BY DATEPART(WEEKDAY,Date_Entered)

答案 1 :(得分:1)

MAX(Date_Entered)排序也应该有效:

SELECT 
    COUNT(Date_Entered), 
    DATENAME(WEEKDAY, Date_Entered)  
FROM my_table
WHERE Board_Name = 'Board' AND DATEDIFF(DAY,Date_Entered,GETDATE()) <= 7
GROUP BY DATENAME(WEEKDAY, Date_Entered)
ORDER BY MAX(Date_Entered);

通常情况下,您希望按升序日期排序,但由于您使用的是聚合函数,因此您需要按破坏它的日期进行分组,但由于每个组中的最大值(日期)是您可以执行的日期最多(日期)订购。

答案 2 :(得分:0)

如果您不能指望每周可用的数据,那么您需要根据日期计算做更多事情。我认为这将更加可靠:

ORDER BY (DATEDIFF(dd, MAX(Date_Entered), CURRENT_TIMESTAMP) + 77777) % 7

编辑:我写道,没有意识到数据已经限制在一周内了。我认为目的是在星期几之前分组,以获得更长的日期。

我还要对我发表评论,对cast(Date_Entered as date)进行分组比使用字符串值更自然,如果这是一个更有效的查询,我也不会感到惊讶。