create table brands(
brand varchar2(50),
st date,
et date
);
insert into brands values('华为',date'2020-2-25',date'2020-2-28');
insert into brands values('华为',date'2020-2-27',date'2020-3-3');
insert into brands values('华为',date'2020-3-5',date'2020-3-8');
insert into brands values('华为',date'2020-2-20',date'2020-2-22');
insert into brands values('华为',date'2020-2-24',date'2020-2-27');
insert into brands values('华为',date'2020-2-26',date'2020-3-2');
insert into brands values('华为',date'2020-3-2',date'2020-3-3');
insert into brands values('华为',date'2020-3-4',date'2020-3-6');
commit;
--查询表格中,不活动时间,分别是多少天。
select * from brands;
with daylists as (
SELECT (select min(st) from brands) + ROWNUM - 1 as daylist --连续天
FROM DUAL
CONNECT BY ROWNUM <=(select max(et) from brands) -
(select min(st) from brands) + 1)
select brand,max(daylist)-min(daylist) + 1 -count(1) from
(select brand,daylist from daylists,brands where daylist
between st and et group by brand,daylist
order by brand,daylist)
group by brand;
这里不是连续登录了,只能用递归去构建一个范围日期表,然后在这张表上有活动的记录,无活动的不记录,再统计这张表的记录信息,就得出结果了,这里做了分组,适合多个品牌的返回结果哦
本文介绍了一种使用SQL递归构建日期范围表的方法,通过该表可以统计品牌在指定时间段内的活动连续性和间断天数。适用于多个品牌的统计需求。
2万+





