【发布时间】:2017-10-09 14:10:28
【问题描述】:
我有一个仓库,有数千个库存单位,有一个唯一的代码、项目代码、数量和生成日期(库存单位“出生”的日期)。
我的经理要求我为每件商品(以字符“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 的库存单位的组
【问题讨论】:
-
我不太了解您的数据是什么样的。你能提供更多的样本数据和期望的结果吗?
-
桌子上是否有
Id或其他东西表明“最近的库存单位”可能是什么? -
请发布一些示例数据和预期结果。
-
@Diego 我已经根据新信息更新了我的答案,但我不明白
Count()的用途是什么? -
Count() 用于查找有多少库存单位具有相同的数量,因为我必须找到每个项目的最大数量,以及相关的数量。因此,一旦我找到它,如果同一项目有多个具有相同值的最大计数,我必须找到该组中最新库存单位的数量(和最大计数)。
标签: sql-server tsql group-by