我有一个与datestamps事件表,我想显示事件之间的时间间隔。举例来说,如果我有计算记录之间的时间?
event | datestamp
-------------------
a | 05:00
b | 07:00
c | 08:00
d | 12:00
...
我想编写一个简单的查询,让我
event | datestamp | last | since_last
-----------------------------------------
a | 05:00 | NULL | NULL
b | 07:00 | a | 2 hours
c | 08:00 | b | 1 hour
d | 12:00 | c | 4 hours
最后一列的格式并不重要 - 它可以是毫秒,秒,东西人类可读,无论简单。另外请注意,实际的数据有适当的日期,我只是懒得输入日期。
重要的是,在记录中没有指向“a”作为前一个事件的“b”,所以像in this question这样的解决方案不起作用 - 我需要一些语法来选择所有记录加入最近的较旧记录。
我已经试过看起来像
SELECT new.event, new.datestamp, old.event AS last,
TIMESTAMPDIFF(SECOND, MAX(old.datestamp), new.datestamp) AS since_last
FROM events AS new, events AS old
WHERE new.datestamp > old.datestamp
LIMIT 10;
,但它只是似乎挂起 - 我让它运行超过一分钟。每this question,我试图
SELECT event, datestamp,
(SELECT MAX(old.datestamp)
FROM events old
WHERE new.datestamp > old.datestamp
) last_ds
FROM events new
LIMIT 10;
这实际工作,但需要在我的表超过14秒,一万个事件,即使我只选择10个记录,所以一定出事了。
你选择10条记录,但内部查询有做计算你的百万+的记录。 – ApplePie
如果你想要你的最后10条记录是不可能通过时间戳限制你的内部查询到最后10条记录? – Prix
人。给定一条记录,我知道如何编写一个查询,用于“选择日期戳记的最小值小于myrecord.datestamp”的记录,并且该查询将立即返回。我想我需要以某种方式“嵌套”,而不是? – Coderer