如何基于两列max获得最新记录

问题描述 投票:1回答:1

我有一个名为Inventory的表,其以下各列

 item     warehouse            date                       sequence number     value

  111       100         2019-09-25 12:29:41.000                1                10
  111       100         2019-09-26 12:29:41.000                1                20
  222       200         2019-09-21 16:07:10.000                1                5
  222       200         2019-09-21 16:07:10.000                2                10
  333       300         2020-01-19 12:05:23.000                1                4
  333       300         2020-01-20 12:05:23.000                1                5

预期输出:

     item     warehouse            date                       sequence number     value

     111       100         2019-09-26 12:29:41.000                1                20
     222       200         2019-09-21 16:07:10.000                2                10
     333       300         2020-01-20 12:05:23.000                1                5

根据物料和仓库,我需要选择最新的日期和值的最新序列号。

我尝试使用下面的代码

select item,warehouse,sequencenumber,sum(value),max(date) as date1
        from Inventory t1
where
 t1.date IN (select max(date) from Inventory t2
                where  t1.warehouse=t2.warehouse
              and t1.item = t2.item
              group by t2.item,t2.warehouse) 
            group by t1.item,t1.warehouse,t1.sequencenumber

它适用于最新日期,但不适用于最新序列号。

您能否建议如何编写查询以获取期望的输出。

sql sql-server tsql greatest-n-per-group
1个回答
0
投票

您可以为此使用row_number()

select *
from (
    select 
        t.*, 
        row_number() over(
            partition by item, warehouse 
            order by date desc, sequence_number desc, value desc
        ) rn
    from mytable t
) t
where rn = 1
© www.soinside.com 2019 - 2024. All rights reserved.