我有一个带有模式的
的sql语句SELECT id FROM table WHERE [conditions] ORDER BY [orders] LIMIT 10000 OFFSET 0
,返回值如下:
id
-----
1
0
0
0
0
1
1
1
2
2
...
然后我想得到它们第一次出现的顺序的明显值,因为在sql中有ORDER BY,而DISTINCT或GROUP BY都发生在sql中的ORDER BY之前,我在下面尝试过SQL。
SELECT DISTINCT id FROM (SELECT id FROM table WHERE [conditions] ORDER BY [orders] LIMIT 10000 OFFSET 0) tmp;
结果就像我想要的那样:
id
----
1
0
2
...
我的问题是:我可以确保在相同的模式SQL中,DISTINCT将始终返回不同的id作为它们首次出现的顺序吗?
感谢。
---------------注释------------------
以下可以忽略。我刚刚注意到很多人都推荐尝试GROUP BY,所以我也试过下面的sql:
SELECT id FROM (SELECT id FROM table WHERE [conditions] ORDER BY [orders] LIMIT 10000 OFFSET 0) tmp GROUP BY id;
但返回是由alpha-beta顺序重新排序的(它不是整数顺序,因为该列是真实id的CHAR列是一个字符串),这不是我想要的。
id
----
0
1
10
100
....
答案 0 :(得分:2)
如果您希望结果按特定顺序排列,则需要在ORDER BY
中为最外层SELECT
指定。这表明这样的事情:
SELECT id
FROM tabl
WHERE [conditions]
ORDER BY [orders]
LIMIT 10000 OFFSET 0
然后,如果您想通过第一次出现进行排序,则需要一个指定第一个外观的列。我们称之为CreatedAt
(也许是orders
?)。如果是这样的话:
SELECT id
FROM table
WHERE conditions
GROUP BY id
ORDER BY min(CreatedAt)
LIMIT 10000;
注意:SQL表代表无序集,因此您需要一个列来指定感兴趣的顺序。