查询使用LIMIT和OFFSET获取不同记录的序列

时间:2018-03-13 16:49:57

标签: mysql sql database

所以,我的问题可能会令人困惑,你可能会问我的意思是什么? 我们假设我的数据库中有以下表格(联系人):

+----+----------+-----------+
| id | provider |   name    |
+----+----------+-----------+
|  1 | MSC      | Roger     |
|  2 | DLL      | Steven    |
|  3 | DLL      | Pensi     |
|  4 | DLL      | Kendswill |
|  5 | MSC      | Mark      |
|  6 | LAPTON   | Steffan   |
|  7 | MSC      | John      |
|  8 | MSC      | Cori      |
|  9 | LAPTON   | Jason     |
+----+----------+-----------+

我希望获取3个记录,因此它必须是特定的序列 - 查询应该为每个提供者生成一个记录的序列(或序列),每个序列中的不同记录(基于在这个示例中的提供程序上),例如,如果LIMIT设置为4,我应该得到:

+----+----------+-----------+
| id | provider |   name    |
+----+----------+-----------+
|  1 | MSC      | Roger     |
|  4 | DLL      | Kendswill |
|  6 | LAPTON   | Steffan   |
|  7 | MSC      | John      |
+----+----------+-----------+

如果我将LIMIT设置为4并将OFFSET设置为4,那么现在我应该得到:

+----+----------+--------+
| id | provider |  name  |
+----+----------+--------+
|  5 | MSC      | Mark   |
|  2 | DLL      | Steven |
|  9 | LAPTON   | Jason  |
|  8 | MSC      | Cori   |
+----+----------+--------+

依此类推。 正如您所看到的,它应该是一致的,并且应该以相同的方式组织(而不是随机方式)。

我听说过差距和岛屿,但是想知道是否有人可以对这个问题有所了解?

1 个答案:

答案 0 :(得分:1)

为具有相同提供程序的每一行分配增加的数字。然后你可以按那个数字排序。每个提供者的行数首先显示为1,然后显示数字为2的行。

##original
Locals: [], Stack: []
Locals: [], Stack: []
##from ASM
Locals: [], Stack: []
Locals: [java.awt.Container], Stack: []

Working example at SQL Fiddle.