如何在Sql Server组中按日期按格式化日期排序?
我的表格如下:如何在Sql Server组中按日期按格式化日期排序?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的表格如下: 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
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中,我可以按TestDate进行排序,而不是上面查询中的最后一行。几乎已经有了
SELECT FORMAT(TestDate, 'MMM-dd-yyyy') as FormattedDate, Result, Count(*)
FROM student_test_records
GROUP BY TestDate, Result
ORDER BY TestDate;
这应该起作用:
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);
我试过了。我需要按MMM dd yyyy分组,因为我需要消除小时、分钟、秒等。但是如果我这样做,我就不能按测试日期下单。我将被迫按格式化的日期排序,它以字符串而不是日期排序。这将导致根据日期对数据增益进行分组。哇,这很有效!您能解释一下为什么需要强制转换吗?因为您需要删除时间戳,sqlserver无法将该格式识别为日期。如果改用convert/cast,情况会有所不同