空席検索
配点 : 30点難易度 : 3
制限実行時間 : 1000ms制限メモリ使用量 : 128 MB
SQLiteの注意点

TOPSIC SQLでは、SQLの実行環境にSQLiteを使用しています。SQLite以外のRDBMSの文法を使用することはできません。
問題を解く際に注意すべきSQLiteの制約について、以下に記載してありますのでご確認下さい。

  1. NUMERIC、INTEGER、REALは、自身のクラスへの変換が推奨されていますが、変換できなかった場合でも、そのまま格納されます。
  2. 新しくデータを追加した場合、既に格納されているデータの中で ROWID の値が最大のものを探し、それに1を加えた値が新しく追加されるデータの ROWID の値として保存されます。
  3. 外部結合は、左外部結合を行う LEFT OUTER JOIN 句のみ使用できます。
    ※2022年12月以降、LEFT / RIGHT / FULL OUTER JOIN が使用可能となりました。
  4. 指定した日付と時刻のタイムゾーンはUTCとして扱われます。
  5. 日付関数や文字列関数については、SQLiteで固有の関数があります。
  6. テーブル項目の論理名が「◯◯日」となっている場合は、日付項目の時分秒は設定されていません。論理名が「◯◯日時」となっている場合は、日付項目の時分秒まで設定されています。
    • 「受注日」の場合は「2021-01-01」
    • 「受注日時」の場合は「2021-01-01 15:15:15」

その他のSQLiteの制約については、SQLiteの公式ドキュメントをご確認ください。
また、ER図の読み方やSQLiteの関数および構文などについては、「受験ルール・用語」をご確認ください。

問題

ある映画館の座席の予約状況を管理している、座席予約テーブル(SEAT_RESERVE)がある。座席数は、列ID(LINE_ID)がA~Eの5列で各列に1~15まで席番号(SEAT_NO)があり全部で75席で、データも75席分が揃っているものとする。
また、予約されている席は、予約状況(RSV_STATUS)が '1' となっており、予約されていない席は '0' となっている。
この座席予約テーブルから、列ID単位で予約されていない連続した3つの席を探して列IDと先頭の座席番号と3番目の座席番号を表示しなさい。

表示項目は以下とする。(エイリアスを使用し→の項目名とする)

  • 列ID → LINE
  • 先頭の座席番号 → SEAT_F
  • 3番の座席番号 → SEAT_T

表示順

  1. 列IDの降順
  2. 先頭の座席番号の昇順

表示フォーマット

※あくまでフォーマットを示すもので、正解例ではありません。行数も正解とは異なります。

LINE SEAT_F SEAT_T
E 5 7
E 9 11
D 2 4
D 3 5
C 9 11

ER図 (半角:物理名、全角:論理名)


テーブル定義

テーブル名: SEAT_RESERVE

主キー 列名 データ型 必須 デフォルト値
✔︎ LINE_ID VARCHAR ✔︎ NULL
✔︎ SEAT_NO INTEGER ✔︎ NULL
RSV_STATUS VARCHAR ✔︎ NULL

サンプルデータ

テーブル名: SEAT_RESERVE

LINE_ID SEAT_NO RSV_STATUS
A 1 1
A 2 0
A 3 0
A 4 0
A 5 1
A 6 1
A 7 1
A 8 0
A 9 0
A 10 0
A 11 0
A 12 1
A 13 0
A 14 1
A 15 0
B 1 0
B 2 0
B 3 1
B 4 1
B 5 0
B 6 0
B 7 1
B 8 1
B 9 0
B 10 0
B 11 1
B 12 1
B 13 0
B 14 0
B 15 1
C 1 1
C 2 1
C 3 0
C 4 0
C 5 1
C 6 1
C 7 1
C 8 1
C 9 0
C 10 0
C 11 0
C 12 0
C 13 0
C 14 1
C 15 0
D 1 1
D 2 0
D 3 0
D 4 0
D 5 0
D 6 1
D 7 1
D 8 0
D 9 0
D 10 1
D 11 1
D 12 1
D 13 0
D 14 0
D 15 1
E 1 0
E 2 0
E 3 1
E 4 1
E 5 0
E 6 0
E 7 0
E 8 1
E 9 0
E 10 0
E 11 0
E 12 1
E 13 0
E 14 0
E 15 1

Sorry, Japanese Only.