顧客のレコードとのユーザー インタラクションを追跡するテーブルがあります。ユーザーによる各「タッチ」の継続時間、つまり、顧客の記録にアクセスする必要があるたびに、各ユーザーが費やした時間を追跡したいと考えています。ROW_NUMBER() OVER (PARTITION BY | ORDER BY) を使用して基本を理解しました。エンドウ豆の頭脳を理解できない問題は、2 つの異なるユーザー タッチが連続しているがかなりの時間間隔がある場合に、それらをどのように分離するかということです。それを明確に説明したかどうかはわかりませんが、以下の例で明確にする必要があります。
正常にクエリできるデータの例を次に示します。
DATE TIME USER
11/17/2011 1:30:47 ZDBatch
11/17/2011 1:32:40 ZDBatch
12/13/2011 10:39:46 EMSZC27
12/13/2011 10:45:48 EMSZC27
目的の結果セットは
DURATION (MIN) USER
1.883 ZDBatch
6.033 EMSZC27
これは、次のクエリで実現されます (上記の例からいくつかの列を除外していることに注意してください)。
; WITH CTE1 AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY thr.[tdate], thr.[job], thr.[who], thr.[moddate] ORDER BY thr.[moddate]) AS RowNo,
thr.[tdate], thr.[job], thr.[moddate], thr.[modtime], thr.[seq], thr.[who],
thr.[description], thr.[histtype], thr.[attachment], thr.[data1], thr.[data2]
FROM Trip_History_Reporting thr
WHERE thr.[tdate] = '2011-10-24' --AND thr.[job] IN ('0653-A', '0128-A')
AND LEFT(thr.[description], 8) <> 'Recalled'
AND (LEFT(thr.[who],5) = 'EMSZC' OR thr.[who] = 'ZDBatch')
--ORDER BY thr.[moddate], thr.[modtime]
)
SELECT tdate, job, MIN(RowNo), MAX(RowNo), MIN(modtime) AS [Start], MAX(modtime) AS [End],
CAST(CAST(DATEDIFF(SECOND, MIN(modtime), MAX(modtime)) AS DECIMAL(6,0))/60 AS DECIMAL(8,2)) AS [Duration (Min)],
who, moddate
FROM CTE1
GROUP BY tdate, job, who, moddate
正常にクエリできないデータの例を次に示します (同じユーザーによる連続した個別のタッチ)。
DATE TIME USER
11/1/2011 6:34:48 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/15/2011 11:08:32 EMSZC34
11/15/2011 11:09:14 EMSZC34
11/15/2011 11:09:14 EMSZC34
11/15/2011 11:09:14 EMSZC34
11/15/2011 11:09:14 EMSZC34
11/15/2011 11:09:14 EMSZC34
この問題は、最初のタッチの終わりから 2 番目のタッチの開始までの間に「かなりの」時間が経過した場合に発生します (議論のために言うと、タッチの間に 1 時間経過した場合、それらは別個のタッチです)。
上記のデータからの望ましい結果セットは次のとおりです。
DURATION (MIN) USER
0.333 EMSZC34
0.7 EMSZC34
これはとても簡単に思えますが、私には理解できません。私の厚かましさに対するアイデア、提案、あからさまな嘲笑を前もって感謝します。
返信が遅くなりましたことをお詫び申し上げます。私は、このグループが無料でサポートを提供していることを認識しており、すぐに返信しないことでそれを利用するつもりはありません。このようなことが二度と起こらないように最善を尽くします。
EricZ の要求に従って、目的の出力の例を次に示します。
DATE TIME USER
11/1/2011 6:34:48 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/1/2011 6:35:08 EMSZC34
11/15/2011 11:08:32 EMSZC34
11/15/2011 11:09:14 EMSZC34
11/15/2011 11:09:14 EMSZC34
11/15/2011 11:15:24 EMSZC34
11/15/2011 11:26:38 EMSZC34
11/15/2011 11:34:55 EMSZC34
11/15/2011 11:36:22 EMSZC34
望ましい出力:
DURATION (MIN) USER
0.333 EMSZC34
27.833 EMSZC34
どうぞよろしくお願いいたします。このジレンマを解決するために島とギャップを調査してきましたが、まだわかりません。