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'