2014-09-03 2 views
0

Я пытаюсь создать запрос, который показывает идентификатор клиента, самое длинное время между файлами, полученными для каждого клиента, и сколько времени прошло с момента последнего полученного файла.Запрос на бездействие Oracle SQL Client

Информация, которая у меня есть, содержится в одной таблице, содержащей имена файлов, время/дата, в которую был получен файл, идентификатор клиента для этого файла и несколько других необработанных столбцов.

Конечный результат, который я ищу, по существу является строкой для каждого идентификатора клиента, а затем максимальное время между файлами, отправляемыми для этого клиента за последний год, а затем время с момента получения последнего файла.

Спасибо заранее!

+2

Что вы пробовали? Мы на самом деле здесь не для того, чтобы вы писали код с нуля. Можете ли вы хотя бы показать схему таблицы, образцы данных и ожидаемые результаты для этих данных? –

ответ

0

Вы можете использовать lag, чтобы получить предыдущую дату, а затем group by найти максимальную разницу:

with y as (
    select 
     client_id, 
     received_date, 
     lag(received_date, 1) over (
      partition by client_id 
      order by received_date 
     ) as prev_date 
    from 
     x 
    where 
     received_date >= sysdate - interval '1' year 
) select 
    client_id, 
    max(received_date - prev_date) as max_duration_days, 
    max(received_date) as last_received_date 
from 
    y 
group by 
    client_id; 

Example SQLFiddle

+0

Спасибо тонну! Lag - именно то, что я искал! – user2890953