表格结构
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
答案 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);