MySQL 需要查询帮助 - 计算时间戳分组范围
MySQL query help needed - Counting timestamps grouped ranges
你以为这很简单,但被踢了一个晚上。我有一个传感器警报日志,并希望为每个不同的传感器生成一个 table,其中包含 24 小时、168 小时(1 周)和 336 小时(2 周)内的事件的简单计数。我在 MySQL(GoDaddy 上的 运行)相对较新并且是自学成才的,并且尝试了我在网上找到的计数、唯一、大小写等的所有变体。帮我欧比旺...
示例数据:
Alert_timestamp
SensorID
2022-05-18 21:41:59
Sensor 1
2022-05-21 21:52:09
Sensor 1
2022-05-24 05:00:39
Sensor 2
2022-05-24 05:02:26
Sensor 1
2022-05-24 18:37:34
Sensor 4
2022-05-24 20:48:40
Sensor 1
2022-05-26 21:20:54
Sensor 2
2022-05-27 14:53:02
Sensor 1
2022-06-01 19:06:14
Sensor 4
2022-06-02 19:22:27
Sensor 1
...
...
期望输出(注意:下面的计数与上面的 table 不对应)。即使传感器的警报为零(例如传感器存在于 table,但日期范围内没有事件),我也想看到这些。
count of events that fall within these ranges
Sensor
<24hrs
24 to 168hrs
168 to 336hrs
Sensor 1
1
1
0
Sensor 2
0
2
5
Sensor 3
0
0
0
Sensor 4
6
2
3
提前致谢!
使用条件聚合。
SELECT SensorID,
SUM( Alert_timestamp > CURRENT_TIMESTAMP - INTERVAL 24 HOUR) `<24hrs`,
SUM( Alert_timestamp <= CURRENT_TIMESTAMP - INTERVAL 24 HOUR
AND Alert_timestamp > CURRENT_TIMESTAMP - INTERVAL 168 HOUR) `24 to 168hrs`,
SUM( Alert_timestamp <= CURRENT_TIMESTAMP - INTERVAL 168 HOUR
AND Alert_timestamp > CURRENT_TIMESTAMP - INTERVAL 336 HOUR) `168 to 336hrs`
FROM table
WHERE Alert_timestamp > CURRENT_TIMESTAMP - INTERVAL 336 HOUR
GROUP BY SensorID
如果 table 包含“将来”的行,则将根据条件添加到第一个聚合和 WHERE。
(SensorID, Alert_timestamp)
的索引会有所改善。
你以为这很简单,但被踢了一个晚上。我有一个传感器警报日志,并希望为每个不同的传感器生成一个 table,其中包含 24 小时、168 小时(1 周)和 336 小时(2 周)内的事件的简单计数。我在 MySQL(GoDaddy 上的 运行)相对较新并且是自学成才的,并且尝试了我在网上找到的计数、唯一、大小写等的所有变体。帮我欧比旺...
示例数据:
Alert_timestamp | SensorID |
---|---|
2022-05-18 21:41:59 | Sensor 1 |
2022-05-21 21:52:09 | Sensor 1 |
2022-05-24 05:00:39 | Sensor 2 |
2022-05-24 05:02:26 | Sensor 1 |
2022-05-24 18:37:34 | Sensor 4 |
2022-05-24 20:48:40 | Sensor 1 |
2022-05-26 21:20:54 | Sensor 2 |
2022-05-27 14:53:02 | Sensor 1 |
2022-06-01 19:06:14 | Sensor 4 |
2022-06-02 19:22:27 | Sensor 1 |
... | ... |
期望输出(注意:下面的计数与上面的 table 不对应)。即使传感器的警报为零(例如传感器存在于 table,但日期范围内没有事件),我也想看到这些。
count of events that fall within these ranges
Sensor | <24hrs | 24 to 168hrs | 168 to 336hrs |
---|---|---|---|
Sensor 1 | 1 | 1 | 0 |
Sensor 2 | 0 | 2 | 5 |
Sensor 3 | 0 | 0 | 0 |
Sensor 4 | 6 | 2 | 3 |
提前致谢!
使用条件聚合。
SELECT SensorID,
SUM( Alert_timestamp > CURRENT_TIMESTAMP - INTERVAL 24 HOUR) `<24hrs`,
SUM( Alert_timestamp <= CURRENT_TIMESTAMP - INTERVAL 24 HOUR
AND Alert_timestamp > CURRENT_TIMESTAMP - INTERVAL 168 HOUR) `24 to 168hrs`,
SUM( Alert_timestamp <= CURRENT_TIMESTAMP - INTERVAL 168 HOUR
AND Alert_timestamp > CURRENT_TIMESTAMP - INTERVAL 336 HOUR) `168 to 336hrs`
FROM table
WHERE Alert_timestamp > CURRENT_TIMESTAMP - INTERVAL 336 HOUR
GROUP BY SensorID
如果 table 包含“将来”的行,则将根据条件添加到第一个聚合和 WHERE。
(SensorID, Alert_timestamp)
的索引会有所改善。