【问题标题】:Group By with max count and max date具有最大计数和最大日期的分组依据
【发布时间】: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


【解决方案1】:

我认为这就是您要寻找的。假设表上有一个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 列提取最大数量等于最新条目当前数量的库存单位项目。

【讨论】:

  • 谢谢,但它不起作用,我对 Row_Number 和 Partition 不实用,但我认为它错过了相同数量的最大计数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2019-08-17
  • 2013-12-27
  • 2010-10-26
  • 2022-11-20
相关资源
最近更新 更多