Как я могу частично GROUP BY столбцы, выбирая значения на основе условия для других?

Есть ли способ сгруппировать данные по неделям, гарантируя, что для некоторых столбцов я получу значение, при котором RN = 1? У меня есть сотни столбцов в моих данных, и только некоторые должны быть там, где RN = 1; те, в названии которых есть MTD.

max ([Значение MTD] как [Значение MTD] не будет работать, поскольку RN = 1 не всегда является самым высоким значением за неделю (случаи, когда месяц меняется в середине недели)

Образец

Мой опыт работы с SQL ограничен, и если ответ заключается в подзапросе, мне может потребоваться помощь, если это возможно.

Что я намерен получить из этого:

введите описание изображения здесь

Я намерен суммировать все свои данные, за исключением нескольких выбранных тегов MTD.

Спасибо, что нашли время.


person Tom    schedule 29.07.2020    source источник
comment
Пожалуйста, покажите нам желаемый результат.   -  person GMB    schedule 29.07.2020
comment
Извините, теперь он был отредактирован с визуальным представлением предполагаемого результата.   -  person Tom    schedule 29.07.2020


Ответы (1)


Вы можете использовать оконные функции для вычисления максимального daily_value в неделю, а затем отфильтровать rn = 1:

select date, week, max_daily_value as daily_value, mtd_value
from (
    select 
        t.*, 
        max(daily_value) over(partition by week) max_daily_value 
    from mytable t
) t
where rn = 1
person GMB    schedule 29.07.2020
comment
Большое спасибо GMB. Полный диплом колледжа и мои знания SQL все еще скребут поверхность. Будем иметь это в виду на будущее. - person Tom; 29.07.2020