0
ありがとうございました。私は私がやりたいことのすべてが互いの5分以内の通話の数を持っているWhoCalledのすべてを見つけることですので、SQLシンプルな日時カウントが発生しました。
SegmentDT DateTime,
WhoCalled varchar(4)
のようなデータベースを持っているMSSQL 2005
を使用しています。
どうすればこの問題を解決できますか?
ありがとうございました。私は私がやりたいことのすべてが互いの5分以内の通話の数を持っているWhoCalledのすべてを見つけることですので、SQLシンプルな日時カウントが発生しました。
SegmentDT DateTime,
WhoCalled varchar(4)
のようなデータベースを持っているMSSQL 2005
を使用しています。
どうすればこの問題を解決できますか?
SELECT WhoCalled, count(*)
FROM tbl a
INNER JOIN tbl b ON a.WhoCalled = b.WhoCalled
AND DateDiff(n, a.SegmentDT, b.SegmentDT) > 0
AND DateDiff(n, a.SegmentDT, b.SegmentDT) <= 5
だから、300秒のウィンドウで複数の呼び出しを持って出現箇所を削除する必要があります10
別の定式化は、ウィンドウ関数を使用することです。これは隣接する行を比較します:
;WITH CTE AS
(
SELECT
WhoCalled,
ROW_NUMBER() OVER (ORDER BY SegmentDT) AS RowNum
FROM
MyTable
)
SELECT
WhoCalled, COUNT(*)
FROM
CTE a
INNER JOIN
CTE b ON a.WhoCalled = b.WhoCalled AND a.RowNum + 1 = b.RowNum
WHERE
DateDiff(second, a.SegmentDT, b.SegmentDT) <= 300
出力を含む例を追加できますか? 3行あり、すべてが= 'beth'とsegmentDTの値を持つ場合、2010年1月1日12:00、2010年1月1日12:01、2010年1月1日12時02分、あなたはどんな結果を期待しますか? – Beth