対処するテーブルがいくつかあります。1つは次のようなものです。
dbo.userActivity
userID Action Time
1 25 12:00
1 10 12:01
1 12 12:35
1 6 13:54
2 10 6:47
2 42 6:48
3 8 11:54
etc.
もう1つの表は、次のようなスケジュールです。
dbo.userSchedule
userID schedule_start schedule_stop
1 07:00 09:00
2 11:00 12:30
3 14:00 15:00
etc.
の各行に対して行う必要があるdbo.userActivity
のは、各アクションが、の1時間前、との時間schedule_start
の間、1時間後、またはその他の時間であったかどうかを判断することです。schedule_start
schedule_stop
schedule_stop
dbo.userActivity
したがって、時間の計算に基づいて、「前」、「中」、「後」、「その他」の値を持つ列をに追加する必要があります。
私はこれをどのように行うのか本当にわかりません。皆さんが提供できる助けをいただければ幸いです。
編集:
さて、私はそれをほとんど機能させています。作業する実際のデータのいくつかを見て、アクティビティの時刻が完全な日時スタンプであるのに対し、アクティビティのスケジュールはちょうど間に合っていることに気付きました。そのため、日時を比較できるものに変換する必要があります。
これは機能しているように見えます:
SELECT * FROM(SELECT CONVERT(TIME、SCANDATE)as scanTime FROM appData)st WHERE st.scanTime <= '6:00' ORDER BY st.scanTime
例として。しかし、このように以下のcaseステートメントにそれを組み込んでみようとすると、機能しません。すべての行に同じTHENを適用します。
SELECT CASE WHEN EXISTS ( SELECT * FROM ( SELECT CONVERT(TIME, SCANDATE) as scanTime FROM appData ) st WHERE st.scanTime <= '6:00' ) THEN 'Before 6 am' ELSE '6 am or after' END FROM appData
これについてさらに考えますか?