我有一个名为 Mydata 的表格如下
id name type
--------------------------------------------
1 vinu 1
2 rinu 2
3 dilu 1
4 raju 2
5 manu 3
6 saju 3
7 ragu 3
8 sonu 1
9 sam 1
10 rag 1
--------------------------------------------
我想打印交替type
的记录,例如:
type = 1的第一行
第二行,类型= 2
类型= 3的第三行
第4行类型= 1
第5行类型= 2,依此类推
所需结果如下
id name type
-----------------------------------------
1 vinu 1
2 rinu 2
5 manu 3
3 dilu 1
4 raju 2
6 saju 3
8 sonu 1
7 ragu 3
9 sam 1
10 rag 1
----------------------------------------------
答案 0 :(得分:2)
示例数据:
SELECT id, name, type FROM (
SELECT
t.*,
@rn := IF(@prev_type = type, @rn + 1, 1) AS rownumber,
@prev_type := type
FROM
t
, (SELECT @rn := 0, @prev_type := NULL) var_init_subquery
ORDER BY type
) sq
ORDER BY rownumber, type
查询:
| id | name | type |
|----|------|------|
| 1 | vinu | 1 |
| 4 | raju | 2 |
| 5 | manu | 3 |
| 9 | sam | 1 |
| 2 | rinu | 2 |
| 7 | ragu | 3 |
| 8 | sonu | 1 |
| 6 | saju | 3 |
| 10 | rag | 1 |
| 3 | dilu | 1 |
结果:
implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))
def loadAllTables() {
Future { loadTable1() }
Future { loadTable2() }
}
警告:
当你有大量数据时,不要期望这是高效的。它正在进行全表扫描。
如果您对这些变量的工作原理感兴趣,可以阅读manual entry。
答案 1 :(得分:0)
这不能通过原始SQL查询来完成。提取您需要显示的行,然后通过您的应用程序对它们进行排序。
或者......您可以编写存储过程,但我不建议这样做。您将需要一个临时表和一个游标(透明地创建另一个临时表)。对于应该经常执行的查询来说太多了。