Как получить последние записи на основе двух столбцов макс - PullRequest
1 голос
/ 21 января 2020

У меня есть таблица с именем 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

Работает для последней даты, но не для последнего порядкового номера.

Можете ли вы предложить, как написать запрос, чтобы получить ожидаемый результат.

1 Ответ

0 голосов
/ 21 января 2020

Вы можете использовать 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
...