0

これは、特定の日付間のデータを取得する select ステートメントです。

SELECT DISTINCT Events.Clock,Events.TagID       
FROM Events
WHERE (DATEDIFF(SECOND, Events.Clock, '2013/04/20') <= 30) AND (DATEDIFF(SECOND,                     Events.Clock, '2013/04/21') >= 30) ORDER BY Events.TagID DESC

これが私が声明から得た結果です。

     | Clock               |  TagID        | 
---------------------------------------------
1    | 2013-04-20 12:39:18 | 4CB0000060032 | 
2    | 2013-04-20 12:39:16 | 4CB0000060032 | 
3    | 2013-04-20 16:53:09 | 4CB0000060032 | 
4    | 2013-04-20 13:22:38 | 4CB00000600EF | 
5    | 2013-04-20 13:22:40 | 4CB00000600EF | 
6    | 2013-04-20 15:20:56 | 4CB00000600D2 | 
7    | 2013-04-20 15:17:31 | 4CB00000600D2 | 
8    | 2013-04-20 15:20:58 | 4CB00000600D2 | 
9    | 2013-04-20 19:33:09 | 4CB00000600D1 | 
10   | 2013-04-20 20:39:16 | 4CB00000600D1 | 
11   | 2013-04-20 11:10:38 | 4CB00000600D1 | 

ここで、結果をさらにフィルタリングしたいと思います。時間がミリ秒単位で異なるレコードと秒単位で異なるレコードがあるため、同じ TagID と数秒後に続く時間を持つレコードを削除したい/ミリ秒。TagID の重複は問題ありませんが、時間が数秒/ミリ秒離れている場所ではありません。

したがって、レコード 2、4、6、7 は存在しません。

次に、取得したい結果は次のようになります。

    | Clock               |  TagID        | 
-------------------------------------------
1   | 2013-04-20 12:39:18 | 4CB0000060032 | 
2   | 2013-04-20 16:53:09 | 4CB0000060032 | 
3   | 2013-04-20 13:22:40 | 4CB00000600EF |
4   | 2013-04-20 15:20:58 | 4CB00000600D2 | 
5   | 2013-04-20 19:33:09 | 4CB00000600D1 | 
6   | 2013-04-20 20:39:16 | 4CB00000600D1 |
7   | 2013-04-20 11:10:38 | 4CB00000600D1 | 
4

1 に答える 1

1

現在のクエリの結果を保持する一時テーブルを作成します。

CREATE TABLE #Events (
Clock DATETIME,
TagID VARCHAR(20)
)

現在のクエリ:

INSERT #Events
SELECT DISTINCT Events.Clock,Events.TagID       
FROM Events
WHERE (DATEDIFF(SECOND, Events.Clock, '2013/04/20') <= 30)
 AND (DATEDIFF(SECOND, Events.Clock, '2013/04/21') >= 30)
ORDER BY Events.TagID DESC

次に、特定の期間内に (同じ TagID の) 前の日付の行がない行のみを選択します。ここでは例として 3000 ミリ秒を使用しました。

SELECT * FROM #Events e1
WHERE NOT EXISTS
(SELECT 1 FROM #Events e2
 WHERE e2.TagID = e1.TagID
   AND e2.Clock < e1.Clock
   AND DATEDIFF(millisecond, e2.Clock, e1.Clock) < 3000)
于 2013-04-25T14:32:15.170 に答える