2016-10-26 3 views
1

私は一種のようになり、データのセットを持っている:私は必要なものカウントするSQL。行の内容を解析して決定された条件の下で行の間にDateDiff関数は

TimeStamp | Action 
-------------+------------------------- 
'2016-01-01' | 'State changed to 1' 
'2016-01-03' | 'State changed to 2' 
'2016-01-07' | 'State changed to 1' 
'2016-01-12' | 'State changed to 2' 
'2016-01-20' | 'State changed to Final' 

は、オブジェクトが状態で過ごしてきたどのくらいの時間であるが「1」どのくらい多くの時間を国家 '2'などで過ごしたかなどの情報が含まれています。日のそれぞれの状態を数えて考えると、私たちはDateDiffを使って遊ぶ方法を頭に入れてはいけません。最後):

'1' | '2' 
--------- 
    5 | 12 

だから私は一般的に2つの質問があります:

  1. SQLでそれを行うことさえできますか?
  2. もしそうなら、どうすればいいのですか?

ありがとうございます!

編集:DBMSを言及するのを忘れてしまったのSQL Server 2012

+0

あなたのDBMSとは何ですか? SQLサーバー? – Siyual

+0

これを行うにはピボットが必要です。 –

+0

結果を得るためのロジックを説明できますか?私は理解できませんでしたか? –

答えて

1

CASEを使用してみてください、次のように日付の違いを取得している:

SELECT 
     (CASE WHEN Action = 'Action 1' THEN 
      SELECT ---- Date Diff GROUP BY Action 1 
     ELSE 0 END) 1, 
     (CASE WHEN Action = 'Action 2' THEN 
      SELECT ---- Date Diff GROUP BY Action 2 
     ELSE 0 END) 2 
END) FROM Table 
+0

これは、ありがとう! – IIy333o

0
SELECT MAX(CASE WHEN Action = '1' THEN TOTAL_NO_OF_DAYS END) AS '1', 
     MAX(CASE WHEN Action = '2' THEN TOTAL_NO_OF_DAYS END) AS '2' 
    FROM 
    ( 
     SELECT SUBSTR(Action, 17, 1) AS Action, 
       SUM(DATEDIFF(DAY, LEAD(Timestamp,1) OVER (ORDER BY DAY), DAY 
          ) 
        ) 
       AS TOTAL_NO_OF_DAYS 
     FROM Yourtable 
    GROUP BY Action 
) 
WHERE Action IN ('1' , '2'); 
関連する問題