SQL Server: суммировать результаты, используя максимум другого столбца - PullRequest
0 голосов
/ 23 ноября 2018

Я борюсь с этим.У меня есть следующие данные в таблице (на самом деле гораздо больше столбцов, которые нужно уменьшить):

Data example!

Вопрос в том, как мне получить результат?

Правила таковы, что я хочу, чтобы только одна строка на субпродукт брала только Max(changed).

Можете ли вы мне помочь?

Я пытался Group by Product, subproduct, но потерпел неудачу

HELP!

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Обратите внимание на следующее (измените Table1 на имя вашей таблицы):

select a.*
from Table1 a inner join
(
    select b.product, b.subproduct, max(b.changed) as mc
    from Table1 b
    group by b.product, b.subproduct
) c on 
a.product = c.product and 
a.subproduct = c.subproduct and 
a.changed = c.mc

Подзапрос выбирает Product и Subproduct с самым последним значением Changed, и самый внешний запрос присоединяется кисходная таблица с выбранной подзапросом записью.

0 голосов
/ 23 ноября 2018
SELECT * FROM
(
  SELECT *, ROW_NUMBER() OVER(PARTITION BY Product, SubProduct ORDER BY Changed DESC) rn FROM table
)
WHERE rn = 1

ROW_NUMBER() OVER(PARTITION BY Product, SubProduct ORDER BY Changed DESC) нумерует строки в порядке убывания значения Изменено.Каждый раз, когда меняется комбинация «Продукт + Подпродукт», нумерация перезапускается с 1

. Затем у нас есть внешний запрос, который выбирает все строки, пронумерованные 1

. Причина, по которой это работает, заключается в том, чтодействительно группа.Раздел похож на группу, но мы не теряем строк с помощью этой техники - все строки на входе попадают в выход с добавлением дополнительных данных.Напротив, группа теряет данные;если вы группируете по продуктам и подпродуктам, вы не можете добавить больше столбцов, не добавляя их в ключ группировки, который уничтожает группу, которую вы пытаетесь создать.Единственное, что вы можете сделать со столбцом в запросе на группировку, - запустить на нем агрегатную функцию, но вы не можете сказать «дайте мне максимум измененных и я хочу связанную цену», вы можете только спросить максимальное измененное значение,и максимальная цена (или что-то еще), и они не обязательно приходят из одного ряда

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...