我在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)在结果中,一周中的天数按字母顺序排列:星期五>星期一>星期六>星期日>星期四>星期二>星期三。
我如何按照正常的/正确的/常识的顺序排序,从7天前的工作日开始到昨天结束?
发布于 2015-09-11 22:51:55
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);通常,您希望按日期升序,但由于使用了聚合函数,因此需要按破坏日期对其进行分组,但由于每个组中的最大值(日期)是您可以执行max( date )命令的日期。
发布于 2015-09-11 22:49:06
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)发布于 2015-09-11 23:04:38
如果不能指望每周都有可用的数据,那么就需要根据日期计算来做更多的事情。从我头上看,我认为这会更可靠:
ORDER BY (DATEDIFF(dd, MAX(Date_Entered), CURRENT_TIMESTAMP) + 77777) % 7编辑:我写到,没有意识到数据已经被限制在一个星期之内。我想我的意图是在一周中的一天里把它们放在一个更长的时间范围内。
我还要指出,对我来说,在cast(Date_Entered as date)上进行分组比对字符串值进行分组更自然,如果这是一个更高效的查询,我也不会感到惊讶。
https://stackoverflow.com/questions/32533044
复制相似问题