這可能是非常簡單的事情,但我在這個聲明上工作了將近一天,而且我無法通過某種方式獲得。選擇具有最大值的行加入
我想要做的是爲每個存儲位置獲取具有最年輕日期的匹配配售商。
STORAGEPLACE( ID, STORAGE_ZONE, 值a)
PARCELORDER (ID, SHELF, ENDTIME, VALUEB)
Storagezone和貨架都來自相同類型的。
可以有多個匹配的存儲空間和多個配件,這就是爲什麼我需要最小的值。
VALUEA和VALUEB只是附加值。
SELECT p1.NAME, t1.ID, t1.ENDTIME
FROM STORAGE_PLACE p1
LEFT JOIN PARCELORDER t1
ON p1.STORAGE_ZONE=t1.SHELF
INNER JOIN(SELECT ta.ID, MIN(ta.ENDTIME) as mindate
from PARCELORDER ta
GROUP BY ta.ID) tb
ON tb.ID = t1.ID and tb.mindate = t1.ENDTIME
WHERE p1.VALUEA = 0 AND t1.VALUEB = -1
我試了好聯接,(自然,左,內...)這storage_places和parcelorders的多種組合的所有結果。
我已經嘗試過是
SELECT p1.NAME, t1.ID, t1.ENDTIME
FROM STORAGE_PLACE p1
LEFT JOIN PARCELORDER t1
ON p1.STORAGE_ZONE=t1.SHELF
INNER JOIN(SELECT DISTINCT(ta.ID), MIN(ta.ENDTIME) as mindate
from PARCELORDER ta
GROUP BY ta.ID) tb
ON tb.ID = t1.ID and tb.mindate = t1.ENDTIME
WHERE p1.VALUEA = 0 AND t1.VALUEB = -1
SELECT p1.NAME, t1.ID, t1.ENDTIME
FROM STORAGE_PLACE p1
LEFT JOIN PARCELORDER t1
ON p1.STORAGE_ZONE=t1.SHELF
INNER JOIN(SELECT FIRST 1 ta.ID, MIN(ta.ENDTIME) as mindate
from PARCELORDER ta
GROUP BY ta.ID) tb
ON tb.ID = t1.ID and tb.mindate = t1.ENDTIME
WHERE p1.VALUEA = 0 AND t1.VALUEB = -1
和它們的幾種組合,但這些只給回第一parcelorder的所有組合。
我使用的是較舊的firebird,所以在SELECT ONE Row with the MAX() value on a column中某處所述的row_number()方法將無法工作。
我剛剛更新了我的問題。 不,有可能有多個伴隨着給定貨架和結束時間的伴侶 – confusedandtired