これはかなり古い質問ですが、頭の中で小さな例を見て、PostgresがSELECT DISTINCT /ORDERBY列にこの一見奇妙な制限がある理由を理解するのに役立ちました。
Rsvpテーブルに次のデータがあるとします。
event_id | start_time
----------+------------------------
0 | Mar 17, 2013 12:00:00
1 | Jan 1, 1970 00:00:00
1 | Aug 21, 2013 16:30:00
2 | Jun 9, 2012 08:45:00
次に、それぞれのstart_times順に並べられた個別のevent_idのリストを取得します。しかし、1
はどこにすべきですか 行く? 1つのタプルが1970年1月1日に開始するため、最初に来る必要がありますか、それとも2013年8月21日のために最後になる必要がありますか?
データベースシステムはその決定を下すことができず、クエリの構文は、操作している可能性のある実際のデータに依存できないため(event_id
を想定) は一意です)、SELECT
からの列のみによる順序付けに制限されています 条項。
実際の質問については、マシューの答えの代わりに、MIN
のような集計関数を使用することもできます。 またはMAX
並べ替え用:
SELECT event_id
FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)
start_time
での明示的なグループ化と集計 データベースが結果タプルの明確な順序を考え出すことを許可します。ただし、この場合は読みやすさが間違いなく問題になることに注意してください;)