2014-09-03 45 views
0

我正在嘗試創建一個查詢,顯示客戶端ID,每個客戶端收到的文件之間的最長時間,以及自收到最後一個文件以來的時間。Oracle SQL客戶端不活動查詢

我所擁有的信息都在一張表中,包含文件名,接收文件的時間/日期,該文件的客戶端ID以及其他多個不需要的列。

我要查找的最終結果基本上是每個客戶端ID的一行,然後是上一年內爲該客戶端發送的文件之間的最大時間,然後是最後一次接收文件之後的時間。

預先感謝您!

+2

你嘗試過什麼?我們並不是真的從頭開始爲你編寫代碼。你能否至少顯示錶格模式,樣本數據以及該數據的預期結果? – 2014-09-03 21:48:58

回答

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

謝謝!滯後正是我所期待的! – user2890953 2014-09-04 14:46:20