【发布时间】:2023-03-17 23:15:02
【问题描述】:
我需要获取某些跟踪数据,包括几个最大值和最小值。我已经有一个可怕的方法来做到这一点,但是你知道这真的很慢,因为我正在使用子查询并且表有几千行。具体来说,我需要根据当前行的 type_dev 获得每行不同的 MAX 值。如果有 24000 条记录,它会变得无法使用,而且我认为当我尝试使用 MAX 子句时会更慢。
SELECT dt.some_data, dt.date_visit, dt.url,
(SELECT date_visit FROM device_tracker
WHERE type_dev = dt.type_dev ORDER BY date_visit DESC LIMIT 1) last_visit,
(SELECT date_visit FROM device_tracker
WHERE type_dev = dt.type_dev and url = dt.url ORDER BY date_visit DESC LIMIT 1) last_visit_to_this_url
FROM device_tracker dt WHERE some_where_clauses;
请注意,我不需要全局最大值(这可能很容易),但例如在这种情况下,我得到了每个 type_dev 的最大日期(每一行可以是不同的类型)以及关于每一行的某个 url 的最大日期。
我需要与最短日期相同。
当然有很多更好的方法可以做到这一点。有人能解释一下吗?
【问题讨论】: