Условие и максимальное задание в функции окна красного смещения - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть список дат, счетов и источников данных.Я беру самую последнюю дату max для каждой учетной записи и использую этот номер в своей ссылке на окно.

В своей ссылке на окно я использую row_number () для назначения уникальных строк каждой учетной записи и источникамданные, которые мы получаем и сортируем по дате max для каждой учетной записи и источника данных.Конечный результат должен содержать одну строку для каждой уникальной комбинации учетная запись + источник данных, с максимальной датой, доступной в этой комбинации.Запись с самой высокой датой будет иметь список 1.

Я пытаюсь установить условие для моей оконной функции, когда в запросе отображаются только строки, заполненные 1, а остальные не отображаются ввсе.Это то, что я имею ниже и где я застреваю:

SELECT
  date,
  account,
  data source,
  MAX(date) max_date,
  ROW_NUMBER () OVER (PARTITION BY account ORDER BY max_date) ROWNUM
FROM table
GROUP BY
  date,
  account,
  data source

Любая помощь очень ценится.Я могу уточнить что угодно при необходимости

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Если вам не нужен номер строки для чего-то кроме уникальности, тогда такой запрос должен сработать:

select distinct t.account, data_source, date
from table t
join (select account, max(date) max_date from table group by account) m
on t.account=m.account and t.date=m.max_date

Это может генерировать две записи для одной учетной записи, если две записи для разных источников данных имеютодинаковая дата.Если это возможно, то подход mdem7, вероятно, является лучшим.

Это немного неясно из вопроса, но если вы хотите, чтобы каждая комбинация account и data_source указывала максимальную дату, чтобы убедиться, что нет дубликатов, тогда следует использовать разныедостаточно:

select distinct account, data_source, max(date) max_date
from table t
group by account, data_source
0 голосов
/ 01 февраля 2019

Если я правильно понял ваш вопрос, этот SQL справился бы с задачей

SELECT 
  date,
  account,
  data source,
  MAX(date) max_date
FROM (    
      SELECT
        date,
        account,
        data source,
        MAX(date) max_date,
        ROW_NUMBER () OVER (PARTITION BY account ORDER BY max_date) ROWNUM
      FROM table
      GROUP BY
        date,
        account,
        data source
  )
where ROWNUM = 1
...