我在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天前的工作日开始到昨天结束?
答案 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)
进行分组比使用字符串值更自然,如果这是一个更有效的查询,我也不会感到惊讶。