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
预期产量: 我需要在一行中查看数据,获取最新的seq没有详细信息和lastusagedate(如上一个seqno(9)最新日期)
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为null。但是我应该得到之前的seq max event_date,任何人都可以帮助我:
答案 0 :(得分: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;