2017-06-14 3 views
1

Wir stehen vor einige Probleme beim Erstellen einer MySQL-Abfrage.MySql Unterabfrage Extraktion nach Anzahl der Tage und andere Kriterien

Nehmen wir an, wir speichern zwei Spalten col1 und col2. Angenommen, col1-Wert ist abcd. Also müssen wir alle diese Zeilen finden, deren col1 = abcd und nach 10 Tagen ist col2 value product1.

Lassen Sie mich versuchen, mit Beispiel zu erarbeiten.

enter image description here

Lassen Sie mich versuchen, es zu brechen in Teile

1) alle Zeilen, deren col1 = abcd und extrahieren es WLID, Datum

2) Spiel WLID und Datum mit anderen Zeilen und col2 = Produkt1. und Datum sollte mehr als 10 Tage sein. Also in diesem Fall nur sollte 4. Reihe ausgegeben werden

EDIT Unsere gewünschte Ausgabe ist der 4. Reihe, da durch alle wlid Extrahieren deren col1 = abcd, so erhalten wir row1 und unsere zweite Bedingung, deren Datum mehr als Datum, das extrahiert wird im 1. Zustand und col2 Wert ist Produkt1. So extrahiert Ausgang ist nur der 4. Reihe

Tabelle in Textform

Sr.No WLID col1 col2 Datum

1 1 abcd product1 2017-06-10 04:16:28

2 2 abc product2 2017-06-12 04:16:28

3 1 ab product1 2017-06-17 04:16:28

4 1 a product1 2017.06.21 04.16.28

5 1 a product2 2017-06-21 04:16:28

+0

Ihre Frage zu aktualisieren und fügen Sie das erwartete Ergebnis bitte (und Text verwenden und nicht nur Bild SO ist kein fre Codierservice) – scaisEdge

+0

hallo @scaisEdge I Update die Frage – abhaygarg12493

Antwort

1

können Sie verwenden:

mysql> select * from demo; 

+-------+------+------+-----------+---------------------+ 
| sr_no | wlid | col1 | col2  | date    | 
+-------+------+------+-----------+---------------------+ 
|  1 | 1 | abcd | product 1 | 2017-06-10 04:16:28 | 
|  2 | 2 | abc | product 2 | 2017-06-12 04:16:28 | 
|  3 | 1 | ab | product 1 | 2017-06-17 04:16:28 | 
|  4 | 1 | a | product 1 | 2017-06-21 04:16:28 | 
|  5 | 1 | a | product 2 | 2017-06-21 04:16:28 | 
+-------+------+------+-----------+---------------------+ 
5 rows in set (0.00 sec) 


mysql> select d1.* from demo d1 inner join demo d2 on d1.col2 = d2.col2 where datediff(d1.date,d2.date) >= 10; 
+-------+------+------+-----------+---------------------+ 
| sr_no | wlid | col1 | col2  | date    | 
+-------+------+------+-----------+---------------------+ 
|  4 | 1 | a | product 1 | 2017-06-21 04:16:28 | 
+-------+------+------+-----------+---------------------+ 

enter image description here

+0

Danke @yusuf, aber Sie vergessen, eine Bedingung hinzuzufügen, wo d2 col2 Produkt 1 sein muss – abhaygarg12493

+0

Ja. Dies ist eine generische Abfrage, die Ihnen wo immer 'col1 = col2' gibt. Was Sie sagen, ist eine einfache Aussage in 'where' Bedingung. Soll ich diese Abfrage auch strukturieren? Auch, fühlen Sie sich frei, die Antwort zu akzeptieren, wenn es Ihnen geholfen hat :) –

+0

Ihre Anfrage ist absolut korrekt und danke für Hilfe. Ich sage nur in Ihrer Anfrage, dass dieser Teil fehlt.By the ways thanks viel, genau diese Abfrage, die wir suchen – abhaygarg12493

0

Versuchen dieses:

select * from Tabelle als t innere Verknüpfung (select * from Tabelle als t2, wo t2.col1 = "abcd") auf t2.Sr.No = t.Sr.No wobei t2.wlid = t.wlid und t.col2 = 'product1' und t.date> DATE_ADD (t2.date, INTERVALL 10 DAY);

Ich habe nicht getestet, lassen Sie mich wissen, ob es für Sie funktioniert.

Verwandte Themen