2017-03-19 8 views
2
Language Date 
---------------------- 
HTML  2017-03-15 
HTML  2017-03-15 
HTML  2017-03-19 
JavaScript 2017-03-12 
JavaScript 2017-03-17 
PHP   2017-03-15 
PHP   2017-03-17 
PHP   2017-03-18 
PHP   2017-03-18 

Ich brauche ein Ergebnis gruppiert nach language mit der zweiten Spalte eine COUNT() jeder Sprache Zeile aus dem aktuellen Datum Eintrag. Nicht alle Sprachen haben Einträge zu denselben Daten.SQL `GROUP BY` und` MAX() `

Für die oben stehende Tabelle, sollten die Ergebnisse sein:

HTML  1 
JavaScript 1 
PHP   2 
+0

Ich bekomme nicht die Anzahl Teil. Was Sie 1/1/2 gepostet haben, spiegelt nicht jede Sprachreihe wider. Meinst du für ein bestimmtes Datum? Warum ist html/js 1 und PHP 2? –

+0

Ich versuche, eine Zählung jeder Sprache zurückzugeben, aber nur die Einträge von jedem der letzten Einträge der Sprache – atb

+0

Lassen Sie mich sehen, wenn ich es richtig verstehe: Sie möchten, dass die Anzahl die Anzahl der UNIQUE Daten vom letzten Datum widerspiegelt ? –

Antwort

3

Hier ist eine Methode:

select language, count(*) 
from t 
where t.date = (select max(t2.date) 
       from t t2 
       where t2.language = t.language 
       ) 
group by language; 

Dieser verwendet eine korrelierte Unterabfrage für jede Sprache das neueste Datum gehen zu lassen. Es gibt andere Methoden, wie zum Beispiel die Verwendung einer join oder:

select language, count(*) 
from t 
where (t.language, t.date) in (select t2.language, max(t2.date) 
           from t t2 
           group by t2.language 
          ) 
group by language; 
+0

Beide Lösungen funktionieren nicht wie OP gewünscht. –

+0

Hoppla, ich habe die 'Gruppe von' weggelassen. @AzizSaleh. . . Es wäre ausreichend gewesen, einfach zu sagen, dass die "Gruppe nach" fehlt. –

+0

Ich habe das nicht bemerkt, ich habe nur die Abfrage auf SQL-Geige ausgeführt. Mein nächster Schritt war das Debuggen der Abfragen, aber Sie haben es zuvor behoben. Beide funktionieren wie erwartet von den Tests, die ich ausgeführt habe. Fiddle link @ http://sqlfiddle.com/#!9/1e823e/12/0 –