考虑以下两个表:
user:
ID | name
---+--------
1 | Alice
2 | Bob
3 | Charlie
event:
order | user
------+------------
1 | 1 (Alice)
2 | 2 (Bob)
3 | 3 (Charlie)
4 | 3 (Charlie)
5 | 2 (Bob)
6 | 1 (Alice)
如果我运行以下查询:
SELECT DISTINCT user FROM event ORDER BY "order" DESC;
是否可以保证我按以下顺序得到结果?
1 (Alice)
2 (Bob)
3 (Charlie)
如果选择了event
的最后三行,我知道这是我得到的顺序,因为它将按降序排序4,5,6。但是如果选择了前三行,然后DISTINCT
阻止加载最后一棵树以供考虑,我会按相反的顺序得到它。
这种行为在SQL中定义得很好吗?两者中哪一个会发生?在SQLite中怎么样?
答案 0 :(得分:1)
不,不能保证。
查找Itzik Ben-Gan的MS SQL逻辑查询处理阶段海报。它迁移到许多网站,目前位于https://accessexperts.com/wp-content/uploads/2015/07/Logical-Query-Processing-Poster.pdf。
DISTINCT
位于ORDER BY .. TOP
之前,Sql Server可以自由返回Alice的1 | 1 (Alice)
或6 | 1 (Alice)
行。所以(1,2,3),(1,4,5)中的任何一个都是DISTINCT
的有效结果。
答案 1 :(得分:0)
这是一个我认为可以解决您的问题的查询解决方案。
SELECT
MAX([order]) AS MaxOrd
, [user]
FROM Event
GROUP BY [User]
ORDER BY MaxOrd DESC