我有一个非常简单的表:
box
,some_data
,unix_timestamp
理想情况下,每个盒子每小时都会有一个新的时间戳。在为错过的条目生成每日报告时,如何选择条目中的空白,其中一个方框错过了一两个小时?我是否需要选择当天的所有数据并慢慢解析,或者在MySQL查询中有更快的方法吗?
e.g。
SELECT timestamp WHERE [[another timestamp doesn't appear for 65 minutes]]
这样我的报告数据基本上就是......
错过参赛作品:
Box 2
:2:01 am
。 。 。 4:01 am
(缺少3:01的条目)
Box 8
:6:05 am
。 。 。 10:05 am
(7:05,8:05和9:05缺失)
Box 28
:3:15 am
。 。 。 (仍然离线!)
这有可能有很多盒子,所以我想以最有效的方式实现这一目标。如果有人在没有选择整天的数据并通过它解析的情况下想到如何解决这个问题,我很乐意听到它。
感谢!!!
答案 0 :(得分:0)
只使用一个查询我只能想到这个选项,它不能满足你的需要,因为它只适用于跳过最多一个小时的情况,但不适用于例如跳过两个条目:
SELECT DATE_ADD(timestamp, INTERVAL 1 HOUR) FROM table t1
WHERE NOT EXISTS (
SELECT * FROM t2 WHERE t2.timestamp = DATE_ADD(t1.time, INTERVAL 1 HOUR)
)
因此,我建议您使用自己喜欢的编程语言在应用程序级别实现它。
这是一些关于我将如何做的伪代码:
result := [result set coming from your database]
// assuming that result is returned sorted by timestamp (i.e. ORDER BY timestamp)
i = 0
for j in 0..23
elem := [ith elem from result]
if hour(elem) <= j
i++
else
add_to_result(j)