2011-07-25 15 views
0

SQLite3 DBのSQLクエリを作成したいと思います。私のテーブルで日時に関するSQLの質問

私は、次のサンプルデータを持っている

7/1/2011 8:00 LOGIN 
7/1/2011 10:12 LOGOFF 
7/1/2011 10:20 LOGIN 
7/1/2011 17:15 LOGOFF 
7/2/2011 9:00 LOGIN 
7/3/2011 10:00 LOGIN 
7/3/2011 20:00 LOGOFF 

基本的に私は(利用可能な場合)のみ、日付ごとに最初のLOGINエントリと同じ日付の最後のログオフエントリを取得したい

ので、私は、所望の出力テーブルで時間の差を計算することも可能である

7/1/2011 8:00 LOGIN 
7/1/2011 17:15 LOGOFF 
7/2/2011 9:00 LOGIN 
7/3/2011 10:00 LOGIN 
7/3/2011 20:00 LOGOFF 

を生成するクエリであるしたいですか?あなたが毎日のために同じ行にそれらを取ることはありませんなぜ、2011年7月1日に

IEは/ 9:15

+1

日付と時間は別々のフィールドに保存されていますか? –

+0

はい。日付と時刻は別々のフィールドです。 [時間]フィールドには、秒を含めることができます(上記のポスティングでは表示されませんでした)。 DB内のフィールドはVARCHARですが、日付と時刻を保持します。 –

+0

"希望の出力テーブルとの時間差を計算することもできますか?"はい、それはどちらの行ですか?ログインまたはログオフ –

答えて

3

Date, Time, Action命名され、これは何が必要です:

select Date, 
     case Action 
     when 'LOGIN' then Min(Time) 
     when 'LOGOFF' then Max(Time) 
     end as ActionTime, 
     Action 
from YourTable 
group by Date, Action 

更新

差を計算するために、あなたはに一日の行を「フラット化」したい場合があります単一の行:

select Date, MinLoginTime, MaxLogoffTime, MaxLogoffTime - MinLoginTime as Diff 
from 
(
select Date, 
     Min(
      case Action 
       when 'LOGIN' then Time 
       else null 
      end 
     ) as MinLoginTime, 
     Max(
      case Action 
       when 'LOGOFF' then Time 
       else null 
      end 
     ) as MaxLogoffTime 
from YourTable 
group by Date 
) YourDT 

いくつかの注意事項:

あなたはMinLoginTime OR MaxLogoffTimeを持っていない場合は
  • DiffはおそらくDiffのフォーマット上で動作する必要があります
  • nullになります。 SQLiteのためのいくつかの研究をしてください、すべてのRDBMSはその点でその特殊性を持っています。
+0

最初のクエリでは、SQLite3でこのエラーメッセージが表示されます。「集計関数はGROUP BY句では使用できません。 –

2

でしょうか?

私はLEFT JOINを使用しました.1日でLOGINがあり、LOGOFFはありません。あなたの列を想定

+0

私はこのクエリについて混乱しています。 –

関連する問題