分组依据最大计数和最大日期

时间:2017-10-09 14:10:29

标签: sql-server tsql group-by

我有一个仓库,里面有数千个库存单位,有一个独特的代码,物品代码,数量和生成日期(库存单位的日期是#34;天生的#34;)。

我的经理要求我提取每件商品(以char' 2'开头)最大库存单位数量,数量和数量相同。

我写了这个查询,我认为它有效:

with a as 
(
select c.*
from (
        Select Item, Qty, count (Qty) as cnt
        from SI_UDC
        GROUP BY Item, Qty
        ) as c
    inner join 
    (     
        Select item, max(cnt) as maxtotal
        from  (
                Select item, Qty, count (Qty) as cnt
                from SI_UDC
                GROUP BY item, Qty 
                ) as u 
                group by Item
                ) as t
    on c.item = t.item and c.cnt = t.maxtotal
where LEFT(c.item,1)='2' 
)

我有这样的情况:

Item - Qty - cnt

270526 - 900 - 1

280102 - 25600 - 27

似乎有效。

当我查看我看到的某些项目的数据时,我有相同的计数编号和不同的数量:

Item - Qty - cnt

270432 - 600 - 5

270432 - 920 - 5

我问我的经理我必须提取哪些数据,然后用最新的库存单位回复该组的数量。

恐慌。

我已经尝试了好几天,但它没有用。

有人能帮助我吗? 第一个问题:这是我能写的最好的查询吗?或者,还有更好的方法? 第二个也是最重要的问题:如果我有一个项目的多个组,我怎么能用最近的股票单位提取该组?

我希望我能够尽可能地解释这种情况

提前致谢

这里SI_UDC表如何:

ID          item   qty    GenerationDate
PL1007546   240357 120000 2017-09-20 22:00:00.000
PL1007547   240357 2304   2016-04-10 18:00:00.000
PL1007548   240359 1980   2017-08-01 10:00:00.000
PL1007549   240354 620    2015-02-05 21:00:00.000
PL1007550   240587 3570   2017-09-09 22:00:00.000

这是我的查询的样子:

Item        Qty     cnt
211585      1200    1
211970      13936   33
270526      900     1
240468      42000   4
280102      25600   27
219074      9984    20
240519      33000   1
240519      10560   1
270053374   15840   4
223133      2400    10

正如您在我的查询中所看到的,项目240519出现两次。我只需要一行,该组使用最新的GenerationDate

来包含库存单位

1 个答案:

答案 0 :(得分:0)

我认为这是你正在寻找的东西。假设表中有Id表示记录的输入顺序。这用于确定最近的股票单位是什么:

;With Cte As
(
    Select  *, 
            RN      = Row_Number() Over (Partition By Item Order By GenerationDate Desc),
            MaxQty  = Max(Qty) Over (Partition By Item)
    From    SI_UDC
    Where   Item Like '2%'
)
Select  Item, Qty
From    Cte
Where   RN = 1
And     MaxQty = Qty

此查询将根据GenerationDate列提取最大数量等于最新条目当前数量的库存单位商品。