首先,如果我没有正确陈述SQL问题,请耐心等待。
我有一个包含多列数据的表。我的表组的选择标准基于第1列(订单号)。每个订单上可能有多个项目,但项目#不会组合在一起。
示例:
Order Customer Order Date Order Time Item Quantity
123456 45 01/02/2010 08:00 140 4
123456 45 01/02/2010 08:30 270 29
123456 45 03/03/2010 09:00 140 6
123456 45 04/02/2010 09:30 140 10
123456 45 04/02/2010 10:00 270 35
我需要的是如下结果:
Order Customer Order Date Order Time Item Quantity
123456 45 04/02/2010 09:30 140 10
123456 45 04/02/2010 10:00 270 35
此结果显示,在所有更改之后,最终订单包括项目140中的10项和项目270中的35项。
这可能。
蟒
答案 0 :(得分:1)
既然你没有提到它,我会假设你使用的是Oracle:
SELECT ORDER, CUSTOMER, ITEM, MAX(ORDER_TIMESTAMP), MAX(QUANTITY)
FROM (SELECT ORDER,
CUSTOMER,
ITEM,
TO_DATE(TO_CHAR(ORDER_DATE, 'YYYY-MM-DD') || ' ' ||
TO_CHAR(ORDER_TIME, 'HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS')
AS ORDER_TIMESTAMP,
QUANTITY
FROM MY_TABLE)
GROUP BY ORDER, CUSTOMER, ITEM;
分享并享受。
答案 1 :(得分:0)
由于您没有指定哪个数据库产品或版本,我将展示一个适用于SQL Server 2005或更高版本的解决方案:
With RankedItems As
(
Select Order, Customer, [Order Date], [Order Time], Item, Quantity
, Row_Number() Over( Partition By Order, Customer, Item Order By [Order Date] Desc, [Order Time] Desc ) As Num
From Table
)
Select Order, Customer, [Order Date], [Order Time], Item, Quantity
From RankedItems
Where Num = 1
这是一个与数据库无关的解决方案:
Select T.Order, T.Customer, T.[Order Date], T.[Order Time], T.Item, T.Quantity
From Table As T
Where T1.[Order Date] = (
Select Max(T1.[Order Date])
From Table As T1
Where T1.Order = T.Order
And T1.Customer = T.Customer
And T1.Item = T.Item
)
And T1.[Order Time] = (
Select Max(T1.[Order Time])
From Table As T1
Where T1.Order = T.Order
And T1.Customer = T.Customer
And T1.Item = T.Item
And T1.[Order Date] = T.[Order Date]
)
此后续解决方案中的问题是,如果有多个行具有相同的订单,客户,项目,订单日期和订单时间,您将在上面的输出中获得多行。
答案 2 :(得分:0)