SQL:查询以获取用户在给定月份、年份中至少存在 1 天的行
SQL: Query to get rows where the user was present for at least 1 day of a given month, year
如何获取用户在 2019 年 3 月(2019 年 3 月 1 日 -31 日)至少出现 1 天的所有行。这 1 天可以是开始日期或结束日期或两者兼而有之。
Table
| userid | startdate | enddate |. postid
| ------- | --------- | ------ | -----
| u1 | 01-01-2019 | 03-05-2019. | s1
| u1 | 03-06-2019 | 03-22-2019. |. s1
| u1 | 03-23-2019 | 05-20-2019. | s3
| u2 | 03-01-2019 | 12-31-2099. |. s1
| u3 | 01-01-2019 | 04-20-2019. | s2
| u4 | 01-04-2013 | 08-22-2020. | s3
| u4 | 05-20-2020 | 12-31-2099. | s3
预期结果:
| userid | startdate | enddate |. postid
| ------- | --------- | ------ | -----
| u1 | 01-01-2019 | 03-05-2019. | s1
| u1 | 03-06-2019 | 03-22-2019. |. s1
| u1 | 03-23-2019 | 05-20-2019. | s3
| u2 | 03-01-2019 | 12-31-2099. |. s1
| u3 | 01-01-2019 | 04-20-2019. | s2
| u4 | 01-04-2013 | 08-22-2020. | s3
您可以像这样检查存储期间与 2019 年 3 月之间的重叠:
select t.*
from mytable t
where end_date >= '2019-03-01' and start_date <= '2019-03-31'
如何获取用户在 2019 年 3 月(2019 年 3 月 1 日 -31 日)至少出现 1 天的所有行。这 1 天可以是开始日期或结束日期或两者兼而有之。
Table
| userid | startdate | enddate |. postid
| ------- | --------- | ------ | -----
| u1 | 01-01-2019 | 03-05-2019. | s1
| u1 | 03-06-2019 | 03-22-2019. |. s1
| u1 | 03-23-2019 | 05-20-2019. | s3
| u2 | 03-01-2019 | 12-31-2099. |. s1
| u3 | 01-01-2019 | 04-20-2019. | s2
| u4 | 01-04-2013 | 08-22-2020. | s3
| u4 | 05-20-2020 | 12-31-2099. | s3
预期结果:
| userid | startdate | enddate |. postid
| ------- | --------- | ------ | -----
| u1 | 01-01-2019 | 03-05-2019. | s1
| u1 | 03-06-2019 | 03-22-2019. |. s1
| u1 | 03-23-2019 | 05-20-2019. | s3
| u2 | 03-01-2019 | 12-31-2099. |. s1
| u3 | 01-01-2019 | 04-20-2019. | s2
| u4 | 01-04-2013 | 08-22-2020. | s3
您可以像这样检查存储期间与 2019 年 3 月之间的重叠:
select t.*
from mytable t
where end_date >= '2019-03-01' and start_date <= '2019-03-31'