[英]mysql Select row with most recent date per user - make it faster
我表中的記錄如下:
id |sensor_id|val |audit_date
255245| 1|22.12|2017-02-18 08:26:47
我想使用此獲取最新記錄
SELECT `sensor_id`, `val`, `audit_date`
FROM `tests` t1
JOIN (SELECT max(`audit_date`) as audit_date, `sensor_id`
from `tests` group by `sensor_id`) t2
USING (`audit_date`, `sensor_id`)
where `id` > (select max(`id`)-1000 from `tests`)
這需要一秒鍾以上的時間; 沒有最后一個“哪里”-第二和一半。 “ id”是主鍵,現在是索引。 我可以做些什么來使此查詢更快?
該查詢使用max()函數返回最新的已插入記錄
SELECT t1.sensor_id,val,t1.audit_date
FROM `tests` t1
JOIN (SELECT max(`audit_date`) as audit_date, max(`sensor_id`) as max_sensor_id
FROM `tests` group by `sensor_id`) t2
ON t2.max_sensor_id = t1.sensor_id
AND t2.audit_date =t1.audit_date
您可以嘗試使用自排除聯接是否更快:
SELECT t1.sensor_id, t1.val, t1.audit_date
FROM audit t1
LEFT JOIN audit t2
ON t1.sensor_id = t2.sensor_id
AND t2.audit_date > t1.audit_date
where
t2.id is null
基本上說返回記錄,每個sensor_id
沒有更大的audit_date
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.