2017-06-20 1 views
1

Ich habe eine Tabelle: tbl_uesrMysql Abfrage für verschiedene Spalte zählen finden

admission  discharge  name  unit 

2017-05-07 2017-05-10  Deepu  100 
2017-05-07 2017-05-09  Nisanth 100 
2017-05-08 2017-05-10  Ragesh  100 
2017-05-15 2017-05-20  Vidhu  100 
2017-05-15 2017-05-21  Reshma  100 

2017-05-15 2017-05-21  Sneha  104 
2017-06-01 2017-06-10  Lekshmi 104 
2017-06-03 2017-06-10  Nidhin  104 
2017-06-17 2017-06-20  Vineesh 104 

2017-05-07 2017-05-08  Rithun  107 

Die obige Tabelle beschreibt eine bestimmte Benutzer-admission date, discharge date und seine unit. Aus der obigen Tabelle muss ich für eine gegebene date und unithow many admission happened, how many discharge happened finden.

Zum Beispiel auf 2017.05.07, gibt es 2 Eintritt in Einheit 100, 1 Eintritt in Einheit 107, keine Entladung in jeder Einheit.

Also in meinem Ergebnis möchte ich alle dates (Aufnahmedatum und Entlassungsdatum), number of admission, number of discharge

Erwartetes Ergebnis

Date   no_admission  no_discharge  unit 

2017-05-07  2    0    100 
2017-05-07  1    0    107 
2017-05-08  1    0    100 
2017-05-08  0    1    107 
2017-05-15  2    0    100 
2017-05-15  1    0    104 
2017-05-09  0    1    100 
2017-05-10  0    3    100 
2017-05-20  0    1    100 
2017-05-21  0    1    100 
2017-05-21  0    1    104 
2017-06-01  1    0    104 
2017-06-03  1    0    104 
2017-06-17  1    0    104 
2017-06-10  0    2    104 
2017-06-20  0    1    104 

Was ich versucht:

I habe keine Idee, alle Daten wie oben in eine neue Tabelle (Ergebnis) zu übernehmen. Ich habe versucht, no_admission zu finden nach:

SELECT admission as date, count(name) as no_admission, unit FROMtbl_user GROUP BY admission 

und versuchte, die no_discharge zu finden nach:

SELECT discharge as date, count(name) as no_discharge, unit FROMtbl_user GROUP BY discharge 

Aber noch sind nicht in der Lage mein Ergebnis zu finden, wie erwartet ..

Bitte helfen Sie mir zu finden das erwartete Ergebnis ..

+0

Ich persönlich würde nur zwei Abfragen ausführen, um die Anzahl der einzelnen nach Datum gruppiert und diese zu einem einzigen Array durch das Datum indiziert. IMO, alle anderen Optionen würden schnell leicht verwirrend/unlesbar und schwerer zu pflegen werden. –

Antwort

2

Der schwierige Teil hier ist, dass Sie zwei Daten in der gleichen Zeile haben, die manchmal gezählt werden müssen; manchmal nicht und müssen wirklich auf zwei verschiedenen Linien für jedes Datum sein. Eine Möglichkeit, dies zu erreichen, besteht darin, die Daten mit zwei Select-Anweisungen zu entfernen und sie dann zu addieren.

SELECT d.mdate, sum(d.no_Admission) as No_Admission, sum(d.no_Discharge) as no_Discharge, d.unit 
FROM (SELECT admission as mdate, 1 as No_Admission, 0 as No_Discharge, unit 
     FROM tbl_user 
     UNION ALL 

     SELECT discharge as mdate, 0 as No_Admission, 1 as No_Discharge, unit 
     FROM tbl_user) d 
GROUP BY d.mdate, d.unit 

Ein anderer Weg können eine eindeutige Liste der Daten zu erstellen sein, dann nach links in den entsprechenden Datensätze nach Datum durchzuführen. Das Folgende ist nicht getestet und ich bin mir nicht sicher, ob die Datensätze aufgrund der multiplen Verknüpfungen zu tlb_user die Anzahl künstlich aufgebläht hätten. Ich denke nicht; aber nicht positiv.

+0

Die erste von Ihnen angegebene Abfrage funktioniert. Die zweite Abfrage gibt "FUNCTION db_name.coalsece existiert nicht" – next2u

Verwandte Themen