DISTINCT != uniq?

1つのドキュメントを複数のユーザが繰り返し更新するケースを考える。

更新履歴を保存しているのだが、作業者を更新順に表示させたい。

当然のようにSQLでまず取得を考える。

例えば更新順のユーザIDが次のようであるとする。


[1,2,3,1,2,3,2,1,4]
取得するSQLを更新の降順で重複排除する。

SELECT DISTINCT user_id FROM histories WHERE article_id = ? ORDER BY updated_at desc
->[1,2,3,4]
DISTINCTの仕様を把握していないのだが、主キーの若い順にあるものを優先して

並び替えるのだろうか?DISTINCTをとって、更新順のIDセットを取ってくる。


[4,1,2,3,2,1,2,2,1]
このセットにuniqをかければ[4,1,2,3]となるので一応欲しいセットにはなった。

パフォーマンス的にDISTINCTの方が明らかに速いはずだけど、順序に意味がある

場合にうまくいってないことがあるのかもしれない。何か他にキーがあるのかなぁ。


  generated by feedpath Rabbit