多个最大结果

时间:2012-06-22 10:49:42

标签: mysql sql

表格结构

id (p) | date | id2 (fk) | id3 (fk)

其中(p)是主要ID,(fk)是外键

此查询返回最新唯一行的列表

select
    max(date) as date1,
    id1,
    id2
from `table`
group by id1, id2

我还希望连续第二个日期,这必须是第二个最高日期

这样的东西
select
    max(date) as date1,
    max_second(date) as date2,
    id1,
    id2
from `table`
group by id1, id2

1 个答案:

答案 0 :(得分:6)

将表连接到自身,匹配id列,但(并且这是键)匹配连接表的行的日期小于主表行的位置。

select
    max(t1.date) as date1,
    max(t2.date) as date2,
    t1.id2,
    t1.id2
from `table` t1
left join `table` t2 on t2.id1 = t1.id1 and t2.id2 = t1.id2 and t2.date < t1.date
group by id1, id2;

请注意,date2可能null如果前一个日期没有行(因此需要left join

除非你有id1和/或id2的索引,否则这个查询将永远存在 要获得最大速度,请执行以下操作:

create index table_id1_id2 on `table`(id1, id2);

如果速度不够快,请在运行后尝试速度:

create index table_id1_id2_date on `table`(id1, id2, date);