Получение последних доходов от идентификаторов и продуктов из таблицы транзакций

#sql

Вопрос:

Я получаю все комбинации идентификаторов, продуктов и доходов, когда использую max(дата публикации) (см. Код). Я хочу только комбинацию идентификатора, продукта и дохода за самую последнюю дату выставления счета.

  select Id, product, product_category, Revenue, max(Billing_date)
    from Table1
    group by 1,2,3,4
 

Данные содержат различные комбинации продуктов, доходов и дат выставления счетов (это таблица транзакций). Но я хочу использовать комбинацию ID Продукты Категория продуктов Доход только на самую последнюю дату выставления счета. (не вся история транзакций история комбинации идентификатора и продукта для max(billing_date)).

Существуют различные комбинации идентификаторов/продуктов, поэтому мне нужно получить комбинации идентификаторов/продуктов для получения последних данных. Например, id001 ProdcutA 12 декабря 2020 года; id001 ProdcutB 12 декабря 2020 года, А НЕ id001 ProdcutC 12 ноября 2020 года.

Комментарии:

1. Отметьте свой вопрос в базе данных, которую вы используете. Помогут примеры данных и желаемые результаты. Вам нужна только максимальная дата выставления счета в данных?

Ответ №1:

Типичное решение с использованием оконных функций:

 select Id, product, product_category, Revenue, Billing_date
from (select t1.*, 
             rank() over (order by billing_date desc) as seqnum
      from Table1 t1
     ) t1
where seqnum = 1;
 

Если вам нужна самая последняя дата выставления счета за id / product комбинацию, используйте partition by :

              rank() over (partition by id, product order by billing_date desc) as seqnum
 

Комментарии:

1. Я знаю это решение, НО оно работает для комбинации id/продукта.

2. Существуют различные комбинации идентификаторов/продуктов, поэтому мне нужно получить комбинации идентификаторов/продуктов для получения последних данных. Например , id001 ProdcutA 12 декабря 2020 года; id001 ProdcutB 12 декабря 2020 года, А НЕ id001 ProdcutC 12 ноября 2020 года

3. @EthanSmih . . .Это то, что делает последнее выражение.