繁体   English   中英

选择mysql中每个ID的第二行

[英]select 2nd row of every ID in mysql

我有一张桌子:

ID | time
1 | 300
1 | 100
1 | 200
2 | 200
2 | 500

我想为每个ID获得2nd row
我知道我可以获得1st row

select ID,time from T group by ID;  

但我不知道如何获得每个ID的第二行。
我知道mysql limitoffset子句,但是无法弄清楚如何在这里使用它们。
我该怎么做 ?

EDIT : Actually, time is not ordered. I forgot to specify that. I have made an edit in the table.

我只想知道如何制作但我无法解决它,也许你可以解决它。 任何建议表示赞赏,以纠正我的疑问

首先这个选择每个id的第一行。

                  SELECT min(id) id 
                 FROM TableName t2
                 group by id

然后选择not in第一个查询中的min(id)来选择min(id)(这是第二行)

像那样

      SELECT  min(id) id ,time
      FROM TableName 
      WHERE id NOT IN    (
                          SELECT min(id) id 
                          FROM TableName 
                          GROUP BY id
                         )
      GROUP BY id

**正如我所说的那样。 它返回0值。如果你修复它让我编辑我的帖子是有帮助的

这是一个演示

SELECT ID, MAX(time) time
FROM
    (
        select ID, Time
        from    TableName a
        where 
        (
            select count(*) 
            from TableName as f
            where f.ID = a.ID and f.time <= a.time
        ) <= 2
    ) s
GROUP BY ID
SELECT x.* 
  FROM test x 
  JOIN test y 
    ON y.id = x.id 
   AND y.time >= x.time
 GROUP 
    BY id,time 
HAVING COUNT(*) = n;

请注意,任何少于n个结果的条目都将被省略

您不能使用您拥有的表格执行此操作。 您可以通过以下方式进行勇敢的尝试:

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

也就是说,尝试过滤掉第一行。

这是不可能的原因是因为表本质上是无序的,所以表中没有“second”的真正定义。 这使SQL引擎有机会在处理过程中重新排列行,这可以带来很大的性能提升。

甚至你正在使用的构造:

select id, time
from t
group by id

不保证从第一行返回时间 这是MySQL的一个(错误)功能,叫做Hidden Columns。 它实际上仅适用于所有值相同的情况。 我承认在实践中似乎从第一行获得了价值,但你无法保证。

您可能最好的解决方案是将数据选择到具有自动递增列的新表中:

create table newtable (
    autoid int auto_increment,
    id int,
    time int
);

insert into newtable(id, time)
    select id, time from t;

实际上,这可能会保持与原始表相同的顺序,然后您可以使用autoid来获取第二行。 不过,我想强调“在实践中”。 无法保证值的顺序正确,但它们可能是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM