1

セッションが 1 つしかないテーブル内の一意のインシデントの数を取得しようとしています。インシデント番号を格納し、そのセッションの以前のステータスと現在のステータスも格納する、Session Tracking というテーブルがあります。セッションが 1 つしかないインシデントの数と、複数のセッションを持つ可能性のあるインシデントの数を取得したいのですが、次のセッションが閉じて開始され、終了した場合に限ります閉まっている。基本的に、集計リストでステータスを変更しないセッションはカウントしません。

例:

Incident ID  Start Status  End Status
1            Open          Closed
1            Closed        Closed
2            Open          Closed
3            Open          Closed
4            Open          Open
4            Open          Closed

インシデント 2 と 3 はどちらもセッションが 1 つしかなかったため、最初の 3 つのインシデントを取得したいと考えています。最初のインシデントは、すでに終了した後にセッションがあったためカウントしたいと考えています。2 番目のセッションはカウントされません。4 番目のインシデントは、開いているセッションが複数あったため、カウントされません。

これは私が使用しているステートメントであり、何かがおかしいのではないかと思います...

SELECT Incident, COUNT(Incident)
FROM Session_Tracking
WHERE NOT (Prev_Status = 'Closed' AND Current_Status = 'Closed')
GROUP BY Incident
HAVING COUNT(Incident) = 1
4

1 に答える 1

2

ウィンドウ関数をサポートする合理的なデータベースを使用していると仮定すると、次のようにカウントするだけでこれを行うことができます。

select SUM(case when numInIncident = 1 then 1 else 0 end) as Singletons,
       SUM(case when ClosedClosed = numInIncident - 1 and numInINcident > 1 then 1 else 0
           end) as RestClosed
from (select st.*,
             COUNT(*) over (partition by incident) as numInIncident,
             sum(case when startStatus = 'Closed' and endStatus = 'Closed' then 1 else 0 end) over (partition by incident) as ClosedClosed
      from session_tracking
     ) st

内部サブクエリは、各インシデントの行数と、開始ステータスと終了ステータスが両方とも「クローズ」の場合の行数をカウントします。外側のクエリは、このロジックを適用して、必要な数値を取得します。

于 2013-03-21T16:02:56.993 に答える