MySQL CTE-是否可以在数字范围内进行迭代?
我很好奇,是否可以使用CTE进行类似的查询(“id”的值可能不同,不一定是连续的) 输出:MySQL CTE-是否可以在数字范围内进行迭代?,mysql,sql,common-table-expression,Mysql,Sql,Common Table Expression,我很好奇,是否可以使用CTE进行类似的查询(“id”的值可能不同,不一定是连续的) 输出: +------+----+ | val | id | +------+----+ | 5 | 1 | | 10 | 2 | | 22 | 3 | | 5 | 4 | | 10 | 6 | | 22 | 7 | | 5 | 8 | | 10 | 9 | | 22 | 13 | | 5 | 14 | | 10 | 15 | | 22 |
+------+----+
| val | id |
+------+----+
| 5 | 1 |
| 10 | 2 |
| 22 | 3 |
| 5 | 4 |
| 10 | 6 |
| 22 | 7 |
| 5 | 8 |
| 10 | 9 |
| 22 | 13 |
| 5 | 14 |
| 10 | 15 |
| 22 | 16 |
+------+----+
您应该在CTE中指定ORDER BY以获得有意义和可靠的行编号,但您的问题中的查询中没有
row_number() OVER ()
输出:
+------+----+
| val | id |
+------+----+
| 5 | 1 |
| 10 | 2 |
| 22 | 3 |
| 5 | 4 |
| 10 | 6 |
| 22 | 7 |
| 5 | 8 |
| 10 | 9 |
| 22 | 13 |
| 5 | 14 |
| 10 | 15 |
| 22 | 16 |
+------+----+
您应该在CTE中指定ORDER BY以获得有意义和可靠的行编号,但您的问题中的查询中没有
row_number() OVER ()
这就是魔术-非常感谢
这就是神奇之处-非常感谢id的值可能会有所不同?请参见什么是
elt
?返回第一个参数后的第N个参数,即N。id的值可能会有所不同?请参见什么是elt
?返回第一个参数后的第N个参数,该参数为N。在这种情况下,不需要ORDER BY。此查询用于准备数据,以便由其他独立的机器进行进一步处理,例如负载平衡器,其中“val”是机器编号。再次感谢-((row_number()over())-1)%3这节省了我的时间:)在这种情况下不需要订购。此查询用于准备数据,以便由其他独立的机器进行进一步处理,例如负载平衡器,其中“val”是机器编号。再次感谢-((排号()超过())-1)%3这挽救了我的一天:)
row_number() OVER ()