慢慢获得与每行参数相关的最大值和最小值

时间:2011-03-22 15:21:39

标签: mysql max

我需要获取某些跟踪数据,包括几个最大值和分钟数。我已经有了一个可怕的方法在下面这样做,但是你知道这真的很慢,因为我使用子查询,表有几千行。具体来说,我需要每行获得不同的MAX值,具体取决于当前行的type_dev。有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的最大日期(每行可以是不同的类型)以及每行的特定网址的最大日期。

我需要与最小日期相同。

当然,有很多更好的方法可以做到这一点。有人可以对它有所启发吗?

1 个答案:

答案 0 :(得分:1)

SELECT  *
FROM    (
        SELECT  type_dev, MAX(date_visit) AS maxt, MIN(date_visit) AS mint
        FROM    device_tracker
        GROUP BY
                type_dev
        ) t
JOIN    (
        SELECT  type_dev, url, MAX(date_visit) AS maxtu, MIN(date_visit) AS mintu
        FROM    device_tracker
        GROUP BY
                type_dev, url
        ) tu
ON      tu.type_dev = t.type_dev
JOIN    device_tracker dt
ON      dt.type_dev = tu.type_dev
        AND dt.url = tu.url

(type_dev, url, date_visit)上创建一个复合索引,以便快速工作。