Siehe nachstehende Tabelle. Ich muss doppelte Zeilen mit dem minimalen Wert zurückgeben.Geben Sie doppelte Minwerte zurück.
In diesem Beispiel möchte ich nur die 2 Zeilen anzeigen, die SLAT_LEN = 30 bzw. MIN SLAT_LEN haben. Ich habe versucht Rang, aber wenn ich es tue, macht es einen aufeinanderfolgenden Rang. Ich möchte, dass die doppelten Größen denselben Rang haben und nacheinander nach Größe sortiert werden.
Die Größen ändern, so kann ich ist es verwenden nicht nur eine Bedingung wie SLAT_LEN = 30.
Oder ein anderer Ansatz, den ich nehmen sollte?
select *
from(
select lg.wd_demand_id,wm.slat_len, wm.prof_size, wm.wd_material_id, wm.color, rank() over (partition by wm.slat_len order by lg.wd_demand_id) as rank
from wd_demand_log lg, wd_bins wb, wd_material wm, wd_bins_material wbm
where lg.wd_bins_id = wb.wd_bins_id
and lg.wd_material_id = wm.wd_material_id
and lg.wd_bins_id = wbm.wd_bins_id
and lg.wd_material_id = wbm.wd_material_id
AND lg.plant_id = 44 AND lg.dept_id = 220 AND wb.plant_id = 44 AND wb.dept_id = 220
AND NOT EXISTS(SELECT dmpln.wd_demand_id FROM wd_demnd_pln_inv dmpln WHERE dmpln.wd_demand_id = lg.wd_demand_id)
AND wm.prof_size = '2' AND wm.color = 450
AND lg.wd_po_error is null)
Ich bekomme diese Rang-Sache nicht. Warum Partition von wm.slat_len? Warum 'order by lg.wd_demand_id'? Suchst du nicht einfach nach 'rank() over' (order by wm.slat_len) '? (Oder vielmehr 'ORDER BY wm.slat_len FETCH FIRST 1 REIHE MIT KRAWATTEN' falls Sie Oracle 12c haben?) –
@ThorstenKettner Thanks! Ich habe nicht einmal darüber nachgedacht, "Partition durch" zu entfernen. Das gab mir genau das, wonach ich suchte. –
Okay, ich poste dies als Antwort, damit zukünftige Leser die Lösung leicht finden. –