Я пытаюсь найти дубликаты «ключей», чтобы их можно было адресовать и превращать в правильные, уникальные ключи.
Недавно я узнал, что предложение HAVING может фильтровать результаты агрегированного запроса, ориентируясь на результаты GROUP BY. Вы группируете по предполагаемому «ключу» и ИМЕЕТЕ, где число> 1, и есть ваши проблемные строки.
У меня вопрос, что эквивалентно этому для оконных функций?
Следующая таблица должна быть только атомарной по отношению к имени и месяцу, но она использует поле даты, детализированное до дня (т. Е. Может случиться, что что-то происходит дважды или более раз в месяц, когда это должно быть только ежемесячно). 1007 *
select
event_id,
overly_specific_date,
count(*) over(partition by event_id, substring(convert(char(8), overly_specific_date), 0, 7))
from events_historic
order by over(partition by event_id, substring(convert(char(8), overly_specific_date), 0, 7))
против
select
event_id,
count(*)
from events_historic
group by event_id, substring(convert(char(8), overly_specific_date), 0, 7)
having count(*) > 1
Первый запрос хорош, потому что он показывает, что я хочу, но я бы хотел отфильтровать его. Я знаю, что мог бы сделать это в запросе большего размера или в CTE, но я ищу что-то лаконичное, например, HAVING. Во втором запросе используется HAVING, но он больше не отображает одну часть ключа, overly_specific_date.
Как мне отфильтровать второй запрос?