我有两个表,一个包含了update_at(可以超过一行)日期时间,第二个包含了started_date和stopped_date(一个或多个记录)。

我想选择updated_at日期,该日期不应介于started_date和stopped_date之间。

提前致谢。

我看到了另一个问题“在MySQL中检查日期范围的重叠”。

但这不是我想要的。

user_location

+---+-----+-----+---------------------+
|id | lat | lon | updated_date        |
+---+-----+-----+---------------------+
| 1 |16.45|75.45|2018-01-09 12:50:57  |
| 2 |16.85|75.15|2018-01-09 12:53:45  |
| 3 |16.78|75.25|2018-01-09 12:55:48  |
| 4 |16.43|75.35|2018-01-09 13:57:35  |
| 5 |16.48|75.47|2018-01-09 14:59:30  |
| 6 |16.49|75.49|2018-01-10 05:59:58  |
| 7 |16.50|75.50|2018-01-10 07:35:15  |
+---+-----+-----+---------------------+


location_blocked_datetime

+---+--------------------+---------------------+
|id |     start_date     |  stopped_date       |
+---+--------------------+---------------------+
| 1 |2018-01-09 05:55:48 | 2018-01-09 07:55:48 |
| 2 |2018-01-09 12:51:48 | 2018-01-09 12:56:48 |
| 3 |2018-01-10 04:30:48 | 2018-01-04 06:55:48 |
+---+--------------------+---------------------+


我想从user_location表中选择在start_date和stopped_date中不应该有update_date的位置。start_date和停止日期不固定,并且包含多于1条记录

以上查询的结果应如下所示:

如果我想选择位置2018年1月9日

以上查询结果

+---+-----+-----+---------------------+
|id | lat | lon | updated_date        |
+---+-----+-----+---------------------+
| 1 |16.45|75.45|2018-01-09 12:50:57  |
| 2 |16.43|75.35|2018-01-09 13:57:35  |
| 3 |16.48|75.47|2018-01-09 14:59:30  |
+---+-----+-----+---------------------+

最佳答案

因此,我说对了,这些表实际上没有连接,并且您想要获取update_date不在任何start_date -stopped_date范围之间的记录?


如果是这样,则使用not exists像这样:

SELECT
l.*
FROM
user_location l
WHERE DATE(l.updated_date) = '2018-01-09'
and not exists (select 1 from location_blocked_datetime
               where l.updated_date between start_date and stopped_date)

| id | lat | lon |        updated_date |
|----|-----|-----|---------------------|
|  1 |  16 |  75 | 2018-01-09 12:50:57 |
|  4 |  16 |  75 | 2018-01-09 13:57:35 |
|  5 |  16 |  75 | 2018-01-09 14:59:30 |



看到它在sqlfiddle中实时运行

关于mysql - 选择不在started_date和stopped_date之间的updated_date,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48221799/

10-12 19:47