私が正しく理解していれば、セット内の最も早い日付で常に昇順で並べ替えたいと仮定すると、次のことができます。
ORDER BY LEAST(albums.date, videos.date, stories.date)
「LEAST」は、セット内の最小 (つまり、最も古い) 値を返す Oracle 関数です。同様のコマンドを使用せずにデータベースを使用している場合は、CASE ステートメントを使用できます。
ORDER BY CASE
WHEN albums.date <= videos.date AND albums.date <= stories.date THEN albums.date
WHEN videos.date <= albums.date AND videos.date <= stories.date THEN videos.date
ELSE stories.date
これがあなたが望むものかどうかはわかりませんが。アルバム、ビデオ、およびストーリーのすべての情報が 1 行に表示される大きな行が作成されます。異なるアルバム、ビデオ、またはストーリーごとに行が必要な場合は、おそらく JOIN のセットではなく UNION が必要ですが、同じフィールドを使用していることを確認する必要があります。たとえば、表示したい各テーブルにタイトル フィールドがある場合は、次のように使用できます。
SELECT * FROM (
SELECT 'Album' as RowType, album_title as title, subject_id, date from albums
UNION
SELECT 'Video' as RowType, video_title as title, subject_id, date from videos
UNION
SELECT 'Story' as RowType, story_title as title, subject_id, date from stories
)
ORDER BY subject_id, date
これにより、あなたが望んでいたと思われる並べ替え順序が得られます(または、必要に応じて、ORDER BY から subject_id を取り出すことができます)。UNION に関する唯一のことは、基礎となる各クエリで同じ列を返す必要があるということです。そのため、ビデオとアルバムから大幅に異なる情報が必要な場合は、注意が必要です。