我有一个数据集,看起来像这样(包含更多的数据):
| ID| ESN|脉冲响应|脉冲响应时间|时间|
| --|--|--|--|--|
| 753007 | 18067736 | 200 | 2204 |2024-01-04 21:35:00|
| 753008 | 18068072 | 200 | 2205 |2024-01-04 21:35:00|
| 753010 | 18068066 | 0 | 0 |2024-01-04 21:35:00|
| 752924 | 18002333 | 200 | 592 |2024-01-04 21:25:00|
| 752927 | 18002336 | 200 | 709 |2024-01-04 21:25:00|
| 752929 | 18002358 | 200 | 817 |2024-01-04 21:25:00|
我想做的是获得每五分钟间隔的最佳情况下的ping_response。理想情况下,这将是200,但它也可以是其他值,如400或0。但是,如果在五分钟间隔内存在200的值,我希望它代替。
我试图围绕另一个查询的结果构建一个查询。内部查询如下所示:
SELECT ping_response, time
FROM esn_ping
WHERE time <= DATE_SUB(NOW(), INTERVAL 1 HOUR)
ORDER BY time, CASE ping_response
WHEN 200 THEN 0
WHEN 400 THEN 1
ELSE 2
END ASC
字符串
这给了我一个很好的有序值列表。我想我可以简单地按时间分组,一切都可以正常工作,因为它会为每个唯一的时间示例获取第一个结果。然而,正如我们所知,你不能在ORDER BY之后立即执行GROUP BY。没问题,我想,我可以简单地在这个查询周围 Package 另一个查询,如下所示:
SELECT a.* FROM (
SELECT ping_response, time
FROM esn_ping
WHERE time <= DATE_SUB(NOW(), INTERVAL 1 HOUR)
ORDER BY time, CASE ping_response
WHEN 200 THEN 0
WHEN 400 THEN 1
ELSE 2
END ASC
) a GROUP BY time;
型
但是,这样做时,内部查询的顺序将完全取消,并且我不会得到每个间隔的预期结果。考虑到上述数据,我会期望“2024-01-04 21:35:00”给我给予200的值,但我得到的是0的值。
我做错了什么,我该如何纠正?
1条答案
按热度按时间fivyi3re1#
假设“最佳情况”意味着最小值??(如果是这样,那么“最后一个”不是您需要的。)
字符串