簡體   English   中英

mysql選擇每位用戶最新日期的行-使其更快

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM