用MySQL创建循环排列的优雅方式

cac*_*ldo 1 mysql sql permutation

我得到了一组这样的结果:

| id |
| 1  |
| 2  |
| 3  |
| 4  |
Run Code Online (Sandbox Code Playgroud)

我想要的

| id |
| 4  |
| 1  |
| 2  |
| 3  |
Run Code Online (Sandbox Code Playgroud)

有没有任何优雅的方法来使用SQL脚本实现这一目标?

Bor*_*ort 6

你可以使用mod运算符%ORDER BY

DECLARE @maxId AS INT
SELECT @maxId = MAX(Id) FROM MyTable

SELECT id FROM MyTable
ORDER BY Id % @maxId 
Run Code Online (Sandbox Code Playgroud)

您可以通过添加到Id来获得进一步的旋转,即

ORDER BY (Id + 1) % @maxId
Run Code Online (Sandbox Code Playgroud)

我懂了

3
4
1
2
Run Code Online (Sandbox Code Playgroud)

工作SQL小提琴(我刚发现存在) http://sqlfiddle.com/#!3/a7f15/5