根据另一个 Table 中值之间的差异删除 SQL Table 中的行
Delete Rows in SQL Table Based on Difference Between Values in Another Table
我有一个 table(我们称它为 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在2017-01-10
上TIME_A
和TIME_B
之间删除后变成这样:
+-----------+------------+----------+------+
| 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
有大约 14 个月的每日 TIME_A
和 TIME_B
值,因此不想每天手动 delete from dbo.temp where date = 'X' and time between 'Y' and 'Z'
。
不太确定我是否理解你的问题,但你可以试试这个查询
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
我有一个 table(我们称它为 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在2017-01-10
上TIME_A
和TIME_B
之间删除后变成这样:
+-----------+------------+----------+------+ | 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
有大约 14 个月的每日 TIME_A
和 TIME_B
值,因此不想每天手动 delete from dbo.temp where date = 'X' and time between 'Y' and 'Z'
。
不太确定我是否理解你的问题,但你可以试试这个查询
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