#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 . . .Это то, что делает последнее выражение.