【问题标题】:MYSQL: How to select every 4th row STARTING from 3rd row?MYSQL:如何从第 3 行开始选择每 4 行?
【发布时间】:2019-03-20 11:13:02
【问题描述】:

表示结果应选择第 3、第 7、第 11、第 15 行等。 每行都有一个 ID,按升序排列。 我被困了几个小时!非常感谢任何帮助!

【问题讨论】:

  • 请提供样本数据和期望的结果。表格中没有“第三行”这样的东西。表代表 无序 集,因此您需要一个指定排序的列。
  • 每一行都有一个ID,按升序排列。
  • 每第四个数字重复什么数学运算?
  • @YaakovUnger 我怀疑您是否可以使用一个查询来检索它们。您需要多次运行查询。

标签: mysql sql


【解决方案1】:

更简单的方法是在 id 本身上使用 mod:

select * from table where (id + 1) mod 4 = 0;

【讨论】:

  • 或者只是WHERE id mod 4 = 3
【解决方案2】:

假设你的架构是:

   CREATE TABLE t1 (
      id int(11) DEFAULT NULL,
      data varchar(20) DEFAULT NULL
    );

mysql> select * from t1;
+------+--------+
| id   | data   |
+------+--------+
|    1 | abc-1  |
|    2 | abc-2  |
|    3 | abc-3  |
|    4 | abc-4  |
|    5 | abc-5  |
|    6 | abc-6  |
|    7 | abc-7  |
|    8 | abc-8  |
|    9 | abc-9  |
|   10 | abc-10 |
|   11 | abc-11 |
|   12 | abc-12 |
|   13 | abc-13 |
|   14 | abc-14 |
|   15 | abc-15 |
|   16 | abc-16 |
+------+--------+
16 rows in set (0.00 sec)

mysql> select id,data from  (select mod(@r:=@r+1,4) as isfetch,id,data from t1,(select @r:=0) s) k where k.isfetch=0 order by id;
+------+--------+
| id   | data   |
+------+--------+
|    4 | abc-4  |
|    8 | abc-8  |
|   12 | abc-12 |
|   16 | abc-16 |
+------+--------+
4 rows in set (0.01 sec)

【讨论】:

  • 太棒了!正是我想要的!但是,您能否解释一下代码,例如什么是 mod(@r:=@r+1,4),或 where k.isfetch=0 等?非常感谢!
  • mod 将返回“模块化”值。因此,在您的情况下,您需要每 4 条记录返回一次。首先,我生成了一个从 1..n 开始的序列,并将 4 的序列模块化到 isFetch 中,最后在 isFetch = 0 上过滤,因此,它将返回那些具有“0”的行
  • @YaakovUnger 如果ans合适,那么你可以接受它
  • 我选择了@Elanochecer 答案,因为它也有效且更简单。谢谢你教给我的知识。我以后一定会用的!
猜你喜欢
  • 2023-03-28
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
相关资源
最近更新 更多