私が取り組んでいたかなり複雑な SQL クエリにより、(ANSI) SQL の制限について考えさせられました。
任意の順序に関して最大または最小のレコードを取得する方法はありますか?
言い換えると:
次のようなクエリがあるとします。
SELECT * FROM mytable WHERE <various conditions> ORDER BY <order clause>
最初の行のみを返すクエリを作成することは可能ですか (おそらく order 句を別のものに変換することによって)?
LIMIT (MySQL) / ROWNUM (Oracle) などを使用してこれを実行できることは知っていますが、それは標準 SQL ではありません。
また、サブクエリで関心のある最大/最小値を取得し (MIN()/MAX() を使用)、その結果をメインの SELECT の基準として使用することでこれを実行できることも知っています。
SELECT * FROM mytable WHERE <various conditions> AND myMaxColumn=(
SELECT MAX(myMaxColumn) FROM mytable WHERE <various conditions>
)
しかし、それは単一の列で並べ替えたい場合にのみ機能します。これを複数の列に一般化する方法はありません(上記のソリューションをネストする以外に、n列で並べ替えると2 ^ n SELECTになることを意味します)。
複数の副選択をネストするよりも、標準 SQL でより良い方法はありますか?
関連する質問は、SQL クエリを作成して最新のレコードを取得するで尋ねられます。ただし、そこにある回答は、LIMIT と友人を使用するか、上記で説明したように MAX() でサブクエリを使用することを示唆していますが、どちらも私の質問に対する解決策ではありません。