我有一個與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