私はDBAではありません、私はトラブルで自分自身を取得するのに十分知っている私はここで私をすべて負担しています。私はデータのセットから日付の違いを見つけることを試みていますが、状態の変化に基づいてレコード間の条件付き差異の合計だけです。私が持っている問題は、必要なルールに基づいて日数を数えていないことです。SQL Sum Datediff異なる行条件付きで
これらの規則で、SQL 2008 R2を使用する:newValueにまでOLDVALUEは( '何' とNULL)である
- レコードは常に= MIN。
- oldValueがCloseまたはDeferredでない場合にのみ、日数を加算します。
declare @t table ( tranID int, orderNum varchar(20), oldValue varchar(2000), newValue varchar(2000), tranTime datetime ) insert into @t values(140,3, NULL, 'Closed', '2013-01-05 12:00:00.000') insert into @t values(160,4, NULL, 'Defered', '2013-01-07 18:00:00.000') insert into @t values(101,5, NULL, 'New', '2013-01-01 10:01:00.000') insert into @t values(111,5, 'New', 'Closed', '2013-01-02 10:00:00.000') insert into @t values(102,6, NULL, 'New', '2013-01-01 10:02:00.000') insert into @t values(112,6, 'Open', 'Deferred', '2013-01-02 10:10:00.000') insert into @t values(132,6, 'Deferred', 'Closed', '2013-01-04 11:00:00.000') insert into @t values(103,7, NULL, 'New', '2013-01-01 10:03:00.000') insert into @t values(123,7, 'Ready', 'Closed', '2013-01-03 11:30:00.000') insert into @t values(133,7, 'Closed', 'Open', '2013-01-04 11:11:00.000') insert into @t values(143,7, 'Passed', 'Closed', '2013-01-05 12:15:00.000') insert into @t values(104,8, NULL, 'New', '2013-01-01 10:04:00.000') insert into @t values(114,8, 'Open', 'Closed', '2013-01-02 10:20:00.000') insert into @t values(134,8, 'Closed', 'Open', '2013-01-04 11:22:00.000') insert into @t values(144,8, 'Failed', 'Deferred', '2013-01-05 12:30:00.000') insert into @t values(154,8, 'Deferred', 'Closed', '2013-01-06 17:00:00.000')
は、私のような出力に何かを見て期待しています:以前知らnewValueは、現在のレコードOLDVALUEに等しく、クローズに等しいか、または使用
繰延です
orderNum | resolveDays
----------------------
3 | 0
4 | 0
5 | 1
6 | 1
7 | 3
8 | 2
私たちは、日付に基づいてIDが増加するトランザクションを持つ一連の注文を持っています。ソートされたtranIDは日付をソートします。 orderNum、tranIDで注文する必要のあるルールで簡単にグループ化されたデータを確認するには、orderNumが一致する変更を順番に並べて表示することができます。 私は最小日と最大日の差分を返すクエリを持っていますが、これはルールを守らずに日を追加していない間に注文が閉じられたり延期されたりします。
Select orderNum
,MIN(tranTime)as Opened
,MAX(tranTime) as LastClose
,DATEDIFF(DAY,MIN(tranTime),MAX(tranTime)) as resolveDays
,Count(tranTime) as QtyChanged
from @t
group by orderNum
order by orderNum
は私が前のレコードに参加する場合のスイッチとorderNumにわたり合計することを試みたが、カウントが自己を行うにはorderNum OVER RANKまたはROW_NUMBERを使用しようとする私を導いている正しく表示することができませんでしたoldValueとnewValueの大文字小文字の状態をチェックしますが、ピースを接続する何かがありません。私は島やギャップソリューションも見てきましたが、期待通りの結果を得るためにこれらの点を結びつけることはできません。他に何が私はここで試すことができますか?
あなたはケース文を使用できませんか? –
私は正常にできませんでした。 orderNumレコードの各グループをtranIDの順番で調べる必要があるため、orderNum 8のような状況を捉えることはできません。最後の2回のトランザクションでは、作業時間は加算されませんが、3回目は4回目に追加されます。私が期待しているような結果を生むものがあれば、どこに間違っているのか学びたいと思う。 –
これまでに知られているnewValueは何ですか?そのPLZについての説明のビット。 –