Sql 分组并检索表中每个组的最新条目
首先,如果我没有正确陈述SQL问题,请容忍我 我有一个包含多列数据的表。基于第1列(顺序#)的“我的表”组的选择标准。每个订单上可能有多个项目,但项目未分组在一起 例如:Sql 分组并检索表中每个组的最新条目,sql,Sql,首先,如果我没有正确陈述SQL问题,请容忍我 我有一个包含多列数据的表。基于第1列(顺序#)的“我的表”组的选择标准。每个订单上可能有多个项目,但项目未分组在一起 例如: Order Customer Order Date Order Time Item Quantity 123456 45 01/02/2010 08:00 140 4 123456 45 0
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项
这可能吗
python因为您没有指定哪个数据库产品或版本,所以我将展示一个适用于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]
)
后一种解决方案的一个特点是,如果有多行具有相同的订单、客户、项目、订单日期和订单时间,您将在上述输出中获得多行。由于您没有提及,我假设您使用的是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;
分享并享受。Bob的答案看起来不错,但从阅读查询结果来看,它似乎想要的是数量列的最大值,而不是总和,这意味着将“总和(数量)”聚合表达式更改为“最大(数量)”。根据预期结果,我看不到使用的是总和。不是Oracle。我正试图从Macola表构建SQL视图。@天哪,小马们-你说得对-我读错了。更改为MAX,实际上仍然需要进一步更正,因为不能保证MAX(ORDER\u TIMESTAMP)的行与MAX(QUANTITY)的行相对应,但我现在就不考虑它了。关于MAX(ORDER\u TIMESTAMP)和MAX(QUANTITY)行,您是完全正确的。如果数量严格增加,那么我们就可以了,前提是客户不能退货,或者没有撤销购买的设施。