Удалить строки в таблице SQL на основе разницы между значениями в другой таблице - PullRequest
0 голосов
/ 28 мая 2018

У меня есть одна таблица (назовем ее dbo.temp), в которой ежеминутно регистрируется температура от разных датчиков:

+-----------+------------+----------+------+
| SENSOR_ID |   DATE     |   TIME   | TEMP |
+-----------+------------+----------+------+
|    106971 | 2017-01-10 | 10:05:00 | 21.1 |
|    106971 | 2017-01-10 | 10:06:00 | 21.1 |
|    106971 | 2017-01-10 | 10:07:00 | 21.2 |
|    106971 | 2017-01-10 | 10:08:00 | 21.1 |
|    106971 | 2017-01-10 | 10:09:00 | 21.1 |
|    106971 | 2017-01-10 | 10:10:00 | 21.2 |
|    106971 | 2017-01-10 | 10:11:00 | 21.2 |
|    106971 | 2017-01-10 | 10:12:00 | 21.2 |
|    106971 | 2017-01-10 | 10:13:00 | 21.3 |
|    106971 | 2017-01-10 | 10:14:00 | 21.4 |
|    106971 | 2017-01-10 | 10:15:00 | 21.4 |
|    106971 | 2017-01-10 | 10:16:00 | 21.4 |
|    106971 | 2017-01-10 | 10:17:00 | 21.5 |
|    106971 | 2017-01-10 | 10:18:00 | 21.3 |
|    106971 | 2017-01-10 | 10:19:00 | 21.3 |
|    106971 | 2017-01-10 | 10:20:00 | 21.3 |
|    106971 | 2017-01-10 | 10:21:00 | 21.4 |
+-----------+------------+----------+------+

А вторая (dbo.datetime) содержит значения даты и времени.

+-------------+-----------+----------+
|    DATE     | TIME_A    | TIME_B  |
+-------------+-----------+----------+
| 2017-01-10  | 10:13:00  | 10:18:00 |
| 2017-01-11  | 09:18:00  | 10:28:00 |
| 2017-01-12  | 10:45:00  | 10:59:00 |
+-------------+-----------+----------+

Я хочу удалить строки в dbo.temp, где время находится между двумя значениями, указанными в dbo.datetime на любую заданную дату.SENSOR_ID не важно, так как все данные между TIME_A и TIME_B должны быть удалены.

Например, я хочу, чтобы dbo.temp стал таким после удаления между TIME_A и TIME_B на 2017-01-10:

+-----------+------------+----------+------+
| SENSOR_ID |   DATE     |   TIME   | TEMP |
+-----------+------------+----------+------+
|    106971 | 2017-01-10 | 10:05:00 | 21.1 |
|    106971 | 2017-01-10 | 10:06:00 | 21.1 |
|    106971 | 2017-01-10 | 10:07:00 | 21.2 |
|    106971 | 2017-01-10 | 10:08:00 | 21.1 |
|    106971 | 2017-01-10 | 10:09:00 | 21.1 |
|    106971 | 2017-01-10 | 10:10:00 | 21.2 |
|    106971 | 2017-01-10 | 10:11:00 | 21.2 |
|    106971 | 2017-01-10 | 10:12:00 | 21.2 |
|    106971 | 2017-01-10 | 10:19:00 | 21.3 |
|    106971 | 2017-01-10 | 10:20:00 | 21.3 |
|    106971 | 2017-01-10 | 10:21:00 | 21.4 |
+-----------+------------+----------+------+

Как мне это сделать?dbo.datetime имеет ежедневные значения TIME_A и TIME_B в течение ~ 14 месяцев, поэтому не нужно вручную delete from dbo.temp where date = 'X' and time between 'Y' and 'Z' каждый день.

1 Ответ

0 голосов
/ 28 мая 2018

Не совсем уверен, понимаю ли я ваш вопрос, но вы можете попробовать этот запрос

DELETE t
FROM dbo.temp t
JOIN dbo.datetime d ON d.Date = t.Date
WHERE t.Time BETWEEN d.Time_A AND Time_B
...