我有一个仓库,里面有数千个库存单位,有一个独特的代码,物品代码,数量和生成日期(库存单位的日期是#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
来包含库存单位答案 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
列提取最大数量等于最新条目当前数量的库存单位商品。