如何在Sql Server中按日期排序GROUP BY格式化日期?

10

我有一个如下表格:

Table: student_test_records

Student    TestDate                    Result
-------    ------------------          -------
A          2015-01-26 17:28:11         Pass
B          2015-01-24 17:28:11         Fail
C          2015-01-26 17:28:11         Pass
D          2015-01-26 17:28:11         Fail
E          2014-05-23 17:28:11         Pass
F          2013-06-23 17:28:11         Pass
G          2014-05-23 17:28:11         Fail

我正在尝试编写一个在SQL Server中的查询,以以下格式显示每天的通过/失败结果数量:

FormattedDate          Result  Count
-----------            ------  ----- 
May-23-2013            Pass    1
May-23-2014            Fail    1
May-23-2014            Pass    1
Jan-24-2015            Fail    1
Jan-26-2015            Fail    1
Jan-26-2015            Pass    2

以下是我尝试的查询:

SELECT FORMAT(TestDate, 'MMM-dd-yyyy') as FormattedDate, Result, Count
FROM student_test_records  
GROUP BY FORMAT(TestDate, 'MMM-dd-yyyy'), Result 
order BY FORMAT(TestDate, 'MMM-dd-yyyy');

结果集正确,但是排序是按格式化日期字符串(月-日-年按字母顺序)排序的。我该如何根据实际日期(TestDate)对结果进行排序?在MySQL中,我可以使用ORDER BY TestDate而不是上面查询中的最后一行。

2个回答

12

这应该可以工作:

SELECT 
  FORMAT(cast(TestDate as date), 'MMM-dd-yyyy') as FormattedDate,
  Result,
  Count(*) as Count
FROM student_test_records  
GROUP BY cast(TestDate as date), Result 
ORDER BY cast(TestDate as date);

哇,那个有效!你能解释一下为什么需要强制转换吗? - softwarematter
因为你需要删除时间戳,SQL Server 无法将该格式识别为日期。如果你使用了转换/强制转换,情况就会不同。 - t-clausen.dk

3
基本上IT技术已经很成熟了。
SELECT FORMAT(TestDate, 'MMM-dd-yyyy') as FormattedDate, Result, Count(*)
FROM student_test_records  
GROUP BY TestDate, Result 
ORDER BY TestDate;

我已经尝试过了。我需要按MMM-dd-yyyy分组,因为我需要消除小时、分钟、秒等。但是如果我这样做,我就不能按TestDate排序。我将被迫按格式化日期排序,这会按字符串而不是日期排序。 - softwarematter
这将根据日期对数据进行分组。 - Sayed Muhammad Idrees

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接