DISTINCT != uniq?
1つのドキュメントを複数のユーザが繰り返し更新するケースを考える。
更新履歴を保存しているのだが、作業者を更新順に表示させたい。
当然のようにSQLでまず取得を考える。
例えば更新順のユーザIDが次のようであるとする。
取得するSQLを更新の降順で重複排除する。
[1,2,3,1,2,3,2,1,4]
DISTINCTの仕様を把握していないのだが、主キーの若い順にあるものを優先して
SELECT DISTINCT user_id FROM histories WHERE article_id = ? ORDER BY updated_at desc
->[1,2,3,4]
並び替えるのだろうか?DISTINCTをとって、更新順のIDセットを取ってくる。
このセットにuniqをかければ[4,1,2,3]となるので一応欲しいセットにはなった。
[4,1,2,3,2,1,2,2,1]
パフォーマンス的にDISTINCTの方が明らかに速いはずだけど、順序に意味がある
場合にうまくいってないことがあるのかもしれない。何か他にキーがあるのかなぁ。