2015-11-04 83 views
-1
create table imsi_data(account varchar2(20)not null,imsi number(10),seqno number(20) not null,package_id number(10),event_date date) 

insert into imsi_data values('10001',123456,09,164,add_months((sysdate),-2)); 
insert into imsi_data values('10001',123456,09,164,add_months((sysdate-1),-2)); 
insert into imsi_data values('10001',123456,09,164,add_months((sysdate-2),-2)); 
insert into imsi_data values('10001',123456,10,165,add_months((sysdate),-1)); 
insert into imsi_data values('10001',123456,10,165,add_months((sysdate-1),-1)); 
insert into imsi_data values('10001',123456,10,165,add_months((sysdate-2),-1)); 

select * from imsi_data 

ACCOUNT IMSI SEQNO PACKAGE_ID EVENT_DATE  

1 10001 123456 9  164  9/4/2015 4:17:06 AM 
2 10001 123456 9  164  9/3/2015 4:17:18 AM 
3 10001 123456 9  164  9/2/2015 4:18:16 AM 
4 10001 123456 10  165  10/4/2015 4:18:34 AM 
5 10001 123456 10  165  10/3/2015 4:23:23 AM 
6 10001 123456 10  165  10/2/2015 4:23:31 AM 

预期输出: 我需要看到一个行的数据,获取最新的序列编号的详细信息和lastusagedate(如以前的SeqNo(9)最新日期)如何检索上月最新日期和当月最新的日期在SQL

ACCOUNT IMSI SEQNO PACKAGEID LastUsageDate  CurrentUsageDate 

10001 123456 10  165  9/4/2015 4:17:06 AM 10/4/2015 4:18:34 AM 

我的SQL是在这里:

select account, 
     imsi, 
     lastusage_date, 
     current_date, 
     package_id, 
     seqno 
from (
    select ce.package_id, 
      ce.seqno, 
      ce.account, 
      ce.IMSI, 
      lag(ce.event_date) over(partition by ce.IMSI, ce.seqno order by ce.IMSI, ce.event_date desc) lastusage_date, 
      ce.event_date current_date, 
      row_number() over(partition by ce.imsi, ce.seqno order by ce.event_date desc) rn 
    from imsi_data ce 
    where ce.account = '10001' and ce.seqno in (10, 09) 
    group by ce.account, ce.seqno, ce.imsi, ce.event_date, ce.package_id) 
where rn =1 

这是越来越lastusagedate为空。但我应该得到的以前的序列最大EVENT_DATE任何一个可以请帮我出:

+1

请标记使用DBMS。 (当涉及到日期/时间时,它们中的很多与ANSI SQL不兼容)' – jarlh

+0

根据sysdate和varchar2的用法添加了'''标记 –

回答

0

你可以尝试以下方法:

select 
    ce.account, 
    ce.IMSI, 
    ce.seqno, 
    ce.package_id, 
    (
     select 
      max(prev_seq_date_ivw.event_date) ev_date 
     from 
      imsi_data prev_seq_date_ivw 
     where 
      prev_seq_date_ivw.seqno = (
      select 
       max(prev_seq_ivw.seqno) 
       from 
       imsi_data prev_seq_ivw 
       where 
       prev_seq_ivw.seqno < ce.seqno 
     ) 
    ) last_usage_date, 
    max(ce.event_date) current_usage_date 
    from imsi_data ce 
    where ce.account = '10001' and ce.seqno in (10, 09) 
    group by  
    ce.account, 
    ce.IMSI, 
    ce.seqno, 
    ce.package_id; 
相关问题