Problem:
Rufen Sie die neueste Position und die entsprechende ID für jedes Wertpapier in einer Tabelle mit mehreren Wertpapieren ab Positionen mit gleicher Sicherheit.
Daten Tabelle:
id | security | buy_date |
---|---|---|
26 | PCS | 2012-02-08 |
27 | PCS | 2013-01-19 |
28 | RDN | 2012-04-17 |
29 | RDN | 2012-05-19 |
30 | RDN | 2012-08-18 |
31 | RDN | 2012-09-19 |
32 | HK | 2012-09-25 |
33 | HK | 2012-11-13 |
34 | HK | 2013-01-19 |
35 | SGI | 2013-01-17 |
36 | SGI | 2013-02-16 |
18084 | KERX | 2013-02-20 |
18249 | KERX | 0000-00-00 |
Lösung:
Verwendung eines LEFT JOIN und NULL-Filterung:
SELECT p1.id, p1.security, p1.buy_date FROM positions p1 LEFT JOIN positions p2 ON p1.security = p2.security AND p1.buy_date < p2.buy_date WHERE p2.id IS NULL;
In dieser Abfrage verwenden wir einen LEFT JOIN, um die Positionstabelle mit sich selbst zusammenzuführen und Zeilen nach Sicherheit abzugleichen. Die Bedingung p1.buy_date < p2.buy_date stellt sicher, dass p2 eine neuere Position für dasselbe Wertpapier darstellt.
Die WHERE-Klausel filtert dann alle Zeilen heraus, in denen eine neuere Position vorhanden ist, sodass wir nur die neueste Position für jedes Wertpapier haben.
Ergebnisse:
id | security | buy_date |
---|---|---|
27 | PCS | 2013-01-19 |
31 | RDN | 2012-09-19 |
34 | HK | 2013-01-19 |
36 | SGI | 2013-02-16 |
18084 | KERX | 2013-02-20 |
Das obige ist der detaillierte Inhalt vonWie finde ich die aktuellste Position und ID für jedes Wertpapier in einer Datenbank?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!