• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:入退室時間の確認方法)

入退室時間の確認方法

このQ&Aのポイント
  • 部屋の入り口にあるICカードチェッカーのログを活用し、入退室時間の確認方法についてまとめます。
  • Mysql5.1を使用して、ICカードチェッカーのログから入室・退室データを抽出し、レポート作成を行います。
  • 入室日時、退室日時、および名前を表示するレポート形式を考えましたが、データの比較方法についてアドバイスを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.1

データに重複が無いと仮定します。 考え方 (1)人単位に'in'のデータを抽出する。→A (2)人単位に'out'のデータを抽出する。→B (3)AからBを見て同じ人で、時刻が大きいものの中から  最も小さい時刻が退出時刻になる。 select A.jikan as nyuushitsu,min(B.jikan) as taishutsu, A.hito from (select jikan,hito from t1 where inout='in') A left join (select jikan,hito from t1 where inout='out') B on A.hito=B.hito and A.jikan<B.jikan group by A.jikan,A.hito 6行目の結合条件に着目して下さい。 不等号の結合条件というのを思いつかないと 解決しない問題です。サブクエリを使うことで、 B1とかC1は不要になります。

gnomezine
質問者

お礼

サンプルSQLありがとうございます。 早速試してみます。 以上よろしくお願いします。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ちなみに#1さんの回答はサブクエリを使わず、こう書いた方が インデックスが効きやすいかもしれません select A.jikan as nyuushitsu,min(B.jikan) as taishutsu,A.hito from t1 AS A left join t1 AS B on A.hito=B.hito and B.inout='out' and A.jikan<B.jikan where A.inout='in' group by A.jikan,A.hito

gnomezine
質問者

お礼

サンプルSQLありがとうございます。 こちらも試させていただきます。 以上よろしくお願いします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

おなじhitoが一日なんども入退室するのであれば 入室と退室に相関関係があるので最初から1組で管理すればすっきりしますよ 処理としては入室時にhitoと入室時間を書きこみ、退出時間はNULL 退出時に退出時間がNULLのhitoのレコードに退出時間を書きこむ

gnomezine
質問者

お礼

アイデアありがとうございます。 機械から出てくる生ログが時系列に 記載されているだけなので・・・・ 設計するときのポイントとして 覚えておきます。

関連するQ&A