Получение строк заказов, сгруппированных по двум следующим возможным датам отгрузки

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я пытаюсь разобраться в sql, как выбрать все строки заказов для следующих двух возможных дат отгрузки

Строки заказов

     ID  Name       ShipmentDate
    1   Product 1    2019-04-10
    2   Product 1    2019-04-12
    3   Product 2    2019-04-12
    4   Product 1    2019-04-14
  

Желаемый результат

     ID  Name       ShipmentDate
    1   Product 1    2019-04-10
    2   Product 1    2019-04-12
    3   Product 2    2019-04-12
  

Ответ №1:

Один метод использует dense_rank() :

 select ol.*
from (select ol.*,
             dense_rank() over (order by shipmentdate desc) as seqnum
      from orderlines ol
     ) ol
where seqnum <= 2;
  

В качестве альтернативы вы можете использовать фильтрацию в where предложении:

 select ol.*
from orderlines ol
where ol.shipmentdate >= (select distinct ol2.shipmentdate
                          from orderlines ol2
                          order by shipmentdate desc
                          offset 1 fetch first 1 row only
                         );