0
我有一個表在MySQL數據庫中,如:(簡化,以使我的觀點)mysql的連接表,只返回基於時間戳比較行
PARENT
ID | EXPIRE | ITEM
0 | 1000 | FOO
1 | 2000 | BAR
而一個又一個具有一個與表格中的許多關係
ITEMS
ID | FK | TIMESTAMP
0 | 0 | 1488555058
1 | 0 | 1488555059
2 | 0 | 1488555060
考慮ITEMS表正在不斷用新值與當前時間戳填充。我想查詢數據庫,只返回其中ITEMS表不包含具有TIMESTAMP> = CURRENT_TIME - EXPIRE_TIME的記錄的記錄 - 所以結果將只是自EXPIRE時間流逝以來沒有收到新ITEM的PARENT。
我寫這不工作:
select P.ID
from PARENT as P
JOIN ITEMS as I
ON I.FX =
(
SELECT I2.FK
FROM ITEMS as I2
WHERE P.ID = I2.FK
AND ((((UNIX_TIMESTAMP()* 1000) - I2.TIMESTAMP))) > P.EXPIRE
ORDER BY TIMESTAMP DESC
limit 1
)
我要的是零行返回,如果每個家長都爲具有時間戳的ITEM>比(UNIX_TIMESTAMP - EXPIRE),並對每個項目的單個記錄沒有一個。
卡住 - 任何幫助將不勝感激!
編輯 - 基於下面這個答案是工作查詢 - 我需要的是這裏包含沒有沒有一個項目比有效期限並標記它們進行批處理更新項目的結果。
UPDATE PARENT P
SET BATCHID = ?
where not exists(
select 1 from ITEMS V
WHERE V.FK = P.ID
AND ((((UNIX_TIMESTAMP() * 1000) - V.TIMESTAMP)/1000) < P.EXPIRE)
AND P.BATCHID is NULL
ORDER BY P.PROCESSEDTIMESTAMP ASC
)
感謝這把我領到了正確的方向 - 最終結果的編輯 – bsautner
你猜對了,你也可以通過在子選擇擺脫秩序。它沒有任何效果,並會使您的查詢更快。 – Anand