2012-10-24 113 views
1

我正在嘗試編寫一個查詢,以從各種表中提取訂單信息。我以目標日期值命中路障。SQL根據不同表中的最大日期選擇

似乎每次更改目標日期時都會在該表中添加一個新行。我只想要選擇最新的目標日期。我該怎麼辦?

select Distinct 
OR01001 AS OrderNumber, 
OR01002 AS OrderType, 
OR01003 AS CustomerCode, 
OR01015 AS OrderDate, 
OR01017 AS CustomerREP, 
OR01018 AS ContactPerson, 
OR01019 AS SalesmanNumber, 
OR03011 - OR03012 AS OpenQuantity, 
SC03003 AS StockBalance, 
OR01050 AS WarehouseNumber, 
OR01072 AS CustomerPO, 
OR03005 AS ItemCode, 
OR03002 AS LineNumber, 
OR500100.OR50004 As TargetDate 
from OR010100 
INNER Join OR030100 ON OR030100.OR03001 = OR010100.OR01001 
INNER Join SL010100 ON SL010100.SL01001 = OR010100.OR01003 
INNER Join SC030100 ON SC030100.SC03001 = OR030100.OR03005 
Inner JOIN OR500100 ON OR500100.OR50001 = OR010100.OR01001 
where OR010100.OR01002 <> 0 AND OR010100.OR01002 <> 6 AND OR01017 = 'SLOTT' 
Order by OR01017 ASC; 
+4

如果我是你的話,我會在你瘋了之前退出,不得不像表名和字段名稱一樣使用那些不可思議的東西。 –

+0

不幸的是,這個數據庫模式是它的方式。它被設計爲15年前用於多種語言。 – Hexxxer

+0

scala模式,很好猜 – Hexxxer

回答

1

如果我正確理解你的專欄,這裏有一個方法:

SELECT ..., 
    OR500100A.OR50004 AS TargetDate 
FROM ... 
INNER JOIN OR500100 AS OR500100A ON OR500100A.OR50001 = OR010100.OR01001 
    AND NOT EXISTS(SELECT 1 FROM OR500100 AS OR500100B 
        WHERE OR500100B.OR5001 = OR010100.OR01001 
        AND OR500100B.OR50004 > OR500100A.OR50004) 
... 

這可以確保你只能得到一個OR500100一行最新值OR50004對於給定的OR5001

1

從我個人理解,

SELECT 
... 
MAX(OR500100.OR50004) As TargetDate 
FROM... 
WHERE... 
GROUP BY --everything but OR500100.OR50004 
ORDER BY... 

應該做的伎倆

編輯:TY Ic的。

+1

+1如果OP的查詢沒有從'OR500100'中選擇其他任何內容,這也應該起作用。雖然我認爲你的意思是GROUP BY *除了'OR500100.OR50004' *之外的所有東西* ... –

相關問題