ユーザーステータスが変わるたびに、テーブルにタイムスタンプが設定されます。毎日それは "a"で始まり、いつもa→b→c→d→e→...複数の「時間の変更」を同じテーブルから追加する
私はaとbの間の合計時間を求めようとしています'と' c 'と' d 'と' e 'と' f 'の時間の加算などがあります。結果だけを追加し、その後、このselect文を複数回行うことなくこれを行う方法はあり
SELECT cast(us2.status_timestamp as date) - cast(us1.status_timestamp as date)
FROM user_status US1, user_status US2
WHERE US1.statID = 'a' and us2.statID = 'b'
AND US1.user_ID = US2.user_ID
AND US1.work_date = US2.work_date
:
これは、ステータスのうちの2つの間の時間を得るために働きますか?私はより速い方法があると感じます。
注:おそらく、テーブルにLEADとLAG分析関数行ごとに
SELECT cast(status_timestamp as date) - cast(prior_status_timestamp as date) diff,
user_id,
work_date,
statID
FROM (
SELECT status_timestamp,
lag(status_timestamp) over
(partition by user_id,
work_date
order by status_timestamp) prior_status_timestamp,
user_id,
statID,
work_date
FROM user_status)
WHERE statID in ('b','d','f')
を使用できるOracle
私はOPが、他のすべての行セット( 'a'と 'b'、 'c'と 'd'などで、 'b'と 'c' 。 – Allan
@Allan - 良い点。 'b'と 'c'、 'd'と 'e'、 'f'と 'g'の違いを除外するようにクエリを更新しました。 –
しかし、あなたは "やっています" .... h、j、lなどを逃してしまった –