SQL:Select 某些行在 MySQL/MariaDB 中具有 window 功能
SQL: Select certain rows with window functions in MySQL/MariaDB
我的问题可以简化为下面的例子:
create table dsort(dfrom date,dto date,pname varchar(10));
insert into dsort(dfrom,dto,pname) values(20180101,20180101,'Anja');
insert into dsort(dfrom,dto,pname) values(20190101,20191231,'Fred');
insert into dsort(dfrom,dto,pname) values(20190201,20190201,'Willy');
insert into dsort(dfrom,dto,pname) values(20190301,20190301,'John');
insert into dsort(dfrom,dto,pname) values(20191230,20200131,'Sepp');
insert into dsort(dfrom,dto,pname) values(20200201,20200202,'Leo');
现在我正在寻找一个 sql 语句,它选择所有行(按 dfrom
排序)dfrom
不在 dfrom
和 [=20 之间=] 之前选择的任何行,可能使用 window 函数获取其他行的信息,如下所示:
select dfrom,dto,pname from ...
导致:
dfrom dto pname
20180101 20180101 'Anja'
20190101 20191231 'Fred'
20200201 20200202 'Leo'
任何人都可以给我必要的 sql 声明吗?
我认为最简单的方法是 not exists
:
select d.*
from dsort d
where not exists (
select 1
from dsort d1
where d.dfrom > d1.dfrom and d.dfrom < d1.dto
)
我的问题可以简化为下面的例子:
create table dsort(dfrom date,dto date,pname varchar(10));
insert into dsort(dfrom,dto,pname) values(20180101,20180101,'Anja');
insert into dsort(dfrom,dto,pname) values(20190101,20191231,'Fred');
insert into dsort(dfrom,dto,pname) values(20190201,20190201,'Willy');
insert into dsort(dfrom,dto,pname) values(20190301,20190301,'John');
insert into dsort(dfrom,dto,pname) values(20191230,20200131,'Sepp');
insert into dsort(dfrom,dto,pname) values(20200201,20200202,'Leo');
现在我正在寻找一个 sql 语句,它选择所有行(按 dfrom
排序)dfrom
不在 dfrom
和 [=20 之间=] 之前选择的任何行,可能使用 window 函数获取其他行的信息,如下所示:
select dfrom,dto,pname from ...
导致:
dfrom dto pname
20180101 20180101 'Anja'
20190101 20191231 'Fred'
20200201 20200202 'Leo'
任何人都可以给我必要的 sql 声明吗?
我认为最简单的方法是 not exists
:
select d.*
from dsort d
where not exists (
select 1
from dsort d1
where d.dfrom > d1.dfrom and d.dfrom < d1.dto
)