您不能对您拥有的表执行此操作。您可以通过以下方式进行勇敢的尝试:
select id, time
from (select id, time
from t
group by t
) t
where not exists (select 1 from t t2 where t2.id = t.id and t2.time = t.time)
group by id
也就是说,尝试过滤掉第一行。
这不可能的原因是因为表本质上是无序的,因此表中没有“第二个”的真正定义。这使 SQL 引擎有机会在处理过程中按照它认为合适的方式重新排列行——这可以带来巨大的性能提升。
甚至您正在使用的构造:
select id, time
from t
group by id
不保证从第一行返回时间。这是 MySQL 的一个(错误)功能,称为隐藏列。它实际上仅适用于所有值都相同的情况。我承认在实践中它似乎从第一行获得了价值,但你不能保证这一点。
可能您最好的解决方案是将数据选择到具有自动递增列的新表中:
create table newtable (
autoid int auto_increment,
id int,
time int
);
insert into newtable(id, time)
select id, time from t;
在实践中,这可能会保持与原始表相同的顺序,然后您可以使用 autoid 获取第二行。不过,我想强调“在实践中”。无法保证这些值的顺序正确,但它们可能会如此。