如何在sql中检索上月最新日期和本月最新日期
预期产出: 我需要查看一行中的数据,获取最新的seq no details和lastusagedate作为之前的seq no 9 LastDate如何在sql中检索上月最新日期和本月最新日期,sql,oracle,Sql,Oracle,预期产出: 我需要查看一行中的数据,获取最新的seq no details和lastusagedate作为之前的seq no 9 LastDate 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',12345
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
我的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
这将lastusagedate设置为null。但是我应该得到之前的seq max事件日期。有人能帮我吗:你可以尝试以下方法:
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
请标记使用的数据库管理系统。当涉及到日期/时间时,它们中的太多都远远不符合ANSI SQL…”根据sysdate和varchar2的用法添加了oracle标记
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;