我的历史记录表每隔5分钟更新一次(通过其他流程)新记录(TAG_NAME保持不变,但TIME和VALUE会更新)。我正在使用以下查询返回最新记录,同时也由TAG_NAME分组。
SELECT
TAG_NAME,max(TIME) as max_time,
(select value from historical where TAG_NAME=hist.TAG_NAME order by time desc limit 1) as max_value
FROM historical hist
WHERE TIME IS NOT NULL AND GROUP BY TAG_NAME;
此查询在具有100k行的表上花费长达1分钟。任何人都可以帮我优化这个查询吗?
非常感谢!
答案 0 :(得分:0)
试试这个:
SELECT
TAG_NAME, max(`TIME`) as max_time, max(`value`) as max_value
FROM historical
WHERE `TIME` IS NOT NULL
GROUP BY TAG_NAME
;
答案 1 :(得分:0)
你可以获得组合的最大值,所以如果两次相同则得到最大的值。
select TAG_NAME, max(concat(time,value)) as time_value
from historical
group by TAG_NAME
如果需要,您可以在mySQL中分配时间和值,但您也可以在应用程序中将其拆分。
答案 2 :(得分:0)
http://sqlfiddle.com/#!9/6d210/1
SELECT
h.*
FROM historical h
LEFT JOIN historical h1
ON h.TAG_NAME = h1.TAG_NAME
AND h.time<h1.time
WHERE h1.time IS NULL