根据另一篇 SO 帖子(SQL:如何使用 DISTINCT 保持行顺序?),就排序而言,不同的行为非常未定义。
我有一个查询:
select col_1 from table order by col_2
这可以返回像
3
5
3
2
然后我需要在这些上选择一个不同的保留顺序,这意味着我想要
select distinct(col_1) from table order by col_2
返回
3
5
2
但不是
5
3
2
这是我真正想要做的。Col_1 是用户 ID,col_2 是该用户的登录时间戳事件。所以同一个用户(col_1)可以有很多登录时间。我正在尝试建立在系统中看到他们的用户的历史列表。我想说“我们的第一个用户曾经是,我们的第二个用户曾经是”,等等。
那篇文章似乎建议使用 group by,但 group by 并不意味着返回行的顺序,所以我不明白这将如何或为什么适用于此,因为它不会出现 group by 将保留任何顺序。事实上,另一篇 SO 帖子给出了一个示例,其中 group by 将破坏我正在寻找的排序:请参阅“Peter”,了解 sql 中 GROUP BY 和 ORDER BY 之间的区别。有没有办法保证后一种结果?奇怪的是,如果我在实现 DISTINCT 子句,我肯定会先做 order by,然后获取结果并对列表进行线性扫描并自然保留排序,所以我不确定为什么会这样不明确的。
编辑:
谢谢你们!我接受了 IMSoP 的回答,因为不仅有一个我可以玩的交互式示例(感谢您让我开始使用 SQL Fiddle),而且他们还解释了为什么有几件事以他们的工作方式工作,而不是简单地“这样做” . 具体来说,尚不清楚 GROUP BY 不会破坏(而是将它们保存在某种内部列表中)group by 之外的其他列中的值,并且这些值仍然可以在 ORDER BY 子句中检查。