выберите updated_dates, которые не находятся между начатыми датами и остановленными датами

0

У меня две таблицы содержат updated_at (может быть более одной строки) datetime И вторая содержит start_date и stop_date (одна или несколько записей).

Я хочу выбрать update_at дата, которая не должна находиться между start_date и stop_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, где update_date не должно быть в start_date и stop_date.start_date, а остановленные даты не являются фиксированными и содержат более 1 записи

Результат вышеуказанного запроса должен выглядеть следующим образом:

Если я хочу выбрать места на 2018-01-09

Результат выше запроса

+---+-----+-----+---------------------+
|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  |
+---+-----+-----+---------------------+
  • 0
    Что представляет идентификатор в приведенном выше наборе результатов?
  • 0
    Его из таблицы user_location и его первичного ключа
Показать ещё 4 комментария
Теги:

1 ответ

0

Поэтому я правильно понимаю, что таблицы фактически не подключены, и вы хотите получить записи, где update_date не находится между любым диапазоном start_date - stops_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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню