2015-01-27 19 views
5

Ho una tabella come segue:Come ordinare per data in Sql Server GROUP BY data formattata?

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 

I:

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 

Sto tentando di scrivere una query in SQL Server per visualizzare il numero di passati risultati al giorno nel seguente formato/fallito segue è la query ho tentato:

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'); 

il set di risultati è corretto, ma l'ordine viene da stringa data formattata (mese-giorno-anno alfabetico alleato). Come posso ordinare il risultato alla data effettiva (TestDate)? In MySQL, avrei potuto fare ORDER BY TestDate invece dell'ultima riga nella query precedente.

risposta

5

Questo dovrebbe funzionare:

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); 
+0

Wow, funziona! Potresti spiegare perché è necessario il cast? – devnull

+0

perché è necessario rimuovere il timestamp, sqlserver non può riconoscere quel formato come una data. Sarebbe stato diverso se avessi usato convert/cast invece –

2

Praticamente già lì con esso

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

avevo provato. Ho bisogno di raggruppare per MMM-gg-aaaa perché devo eliminare ore, minuti, secondi ecc. Ma se lo metto, non posso ordinare dal TestDate. Sarei costretto a ordinare dalla data formattata, che ordina come stringa invece di data. – devnull