2012-10-24 62 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' *之外的所有东西* ... –

相关问题