在没有运气的情况下到处搜索找到一个有效的 SQL,它允许我根据不在给定日期范围内的日期在另一个表中查找丢失的记录。
表:订阅
+------------+
| id | label |
+------------+
| 1 | aaa |
+------------+
| 2 | bbb |
+------------+
| 3 | ccc |
+------------+
| 4 | ddd |
+------------+
表:subscription_periods
+------------------------------------------------+
| id | subscription_id | start_at | end_at |
+------------------------------------------------+
| 1 | 1 | 2015-12-01 | 2016-01-01 |
+------------------------------------------------+
| 2 | 1 | 2016-01-01 | 2016-02-01 |
+------------------------------------------------+
| 3 | 2 | 2015-12-01 | 2016-01-01 |
+------------------------------------------------+
| 4 | 3 | 2016-02-01 | 2016-03-01 |
+------------------------------------------------+
目标:比如说,今天是 2016-01-15,我想找到缺少 subscription_periods
记录的 subscriptions
记录没有根据给定日期范围(subscription_periods.start_at
和 subscription_periods.end_at
)涵盖今天。
根据上述数据,subscriptions.id #2、#3 和 #4
没有涵盖 2016-01-15 的 subscription_periods
记录 基于给定的日期范围,因此预期结果如下所示:
+------------+
| id | label |
+------------+
| 2 | bbb |
+------------+
| 3 | ccc |
+------------+
| 4 | ddd |
+------------+
非常感谢任何提示,也非常感谢遇到此问题的任何人。
最佳答案
此查询将返回特定日期的 subscription_periods 中缺少的订阅
SELECT DISTINCT S.id, S.label
FROM subscriptions AS S
LEFT JOIN subscription_periods AS SP
ON S.id = SP.subscriptions_id AND @yourDateHere BETWEEN start_at AND end_at
WHERE SP.id IS NULL
关于SQL根据日期范围检索另一个表中缺少记录的记录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34683719/