Beispieldaten auf MAIN_TABLE:Zeilen auswählen mit minimalen Werten [col1] von Maximalwerten [col2] von id SQL Server
+-----+--------+-------+
| ID | HEIGHT | STOCK |
+-----+--------+-------+
| ID1 | 180 | 680 |
| ID1 | 170 | 680 |
| ID1 | 130 | 360 |
| ID2 | 250 | 420 |
| ID2 | 190 | 420 |
| ID2 | 70 | 120 |
| ... | ... | ... |
+-----+--------+-------+
brauche ich verschiedene ID Zeilen auszuwählen, die max STOCK mit der min Höhe haben.
Das gewünschte Ergebnis wäre:
+-----+--------+-------+
| ID | HEIGHT | STOCK |
+-----+--------+-------+
| ID1 | 170 | 680 |
| ID2 | 190 | 420 |
| ... | ... | ... |
+-----+--------+-------+
Query-Code, dass ich es erreichen bin mit:
WITH MAX_STOCK (ID, maxstock) as
(
select ID, max(STOCK) as maxstock
from MAIN_TABLE
group by ID
),
TABLE_STOCK (ID, HEIGHT, STOCK) AS
(
select a.ID, a.HEIGHT, a.STOCK
from MAIN_TABLE a join MAX_STOCK b
on a.ID= b.ID and a.STOCK = b.maxstock
),
MIN_HEIGHT (ID, minheight) as
(
select ID, min(HEIGHT) as minheight
from TABLE_STOCK
group by ID
),
TABLE_HEIGHT (ID, HEIGHT, STOCK) AS
(
select a.ID, a.HEIGHT, a.STOCK
from TABLE_STOCK a join MIN_HEIGHT b
on a.ID= b.ID and a.HEIGHT = b.minheight
)
Wenn ich wählen Sie eine beliebige Tabellen MAX_STOCK, TABLE_STOCK, MIN_HEIGHT,
ich habe Ergebnisse in 1-2 Sekunden Zeit.
Aber bei der Auswahl TABLE_HEIGHT, die mein gewünschtes Ergebnis,
Es wird die Ausführung 6min + auf Daten mit 600 Zeilen ohne Antwort wären
Wie soll ich schreibe diese Abfrage das Ergebnis in angemessener Zeit haben?
wäre nicht die minimale Höhe für ID1 130 ?? –
der Bestand muss zuerst maximal sein, um die minimale Höhe zu berechnen –
versuche die Antwort ich postete –