0

我需要找到一种方法对组中最新时间戳 5 分钟内发生的行进行分组,并且 displayid 和 object id 相同.....

CREATE TABLE [dbo].[ExampleLog](
  [ID] [uniqueidentifier] NOT NULL,
  [EVENTNUMBER] [int] NULL,
  [DISPLAYSERIAL] [int] NULL,
  [DISPLAYID] [varchar](50) NULL,
  [OBJECTSERIAL] [int] NULL,
  [OBJECTRSSILEVEL] [int] NULL,
  [OBJECTID] [varchar](50) NULL,
  [TIMESTAMP] [datetime] NULL)

INSERT INTO [dbo].[ExampleLog]
VALUES 
  (NewID(), 206, 6897913, 'HV 644', 6885819, 66, 'WAP 8', '2012-01-01 12:12:00'),
  (NewID(), 206, 6897913, 'HV 644', 6885819, 66, 'WAP 8', '2012-01-01 12:13:00'),
  (NewID(), 206, 6897913, 'HV 644', 6877807, 54, 'MV 20', '2012-01-01 12:16:00'),
  (NewID(), 103, 6897913, 'HV 644', 6898052, 118, 'HV 62', '2012-01-01 12:20:00'),
  (NewID(), 206, 6897913, 'HV 644', 6886130, 122, 'HV 62', '2012-01-01 12:21:00'),
  (NewID(), 206, 6897913, 'HV 644', 6886130, 106, 'HV 62', '2012-01-01 12:25:00'),
  (NewID(), 204, 6897913, 'HV 644', 6886130, 106, 'HV 62', '2012-01-01 12:31:00'),
  (NewID(), 204, 6897913, 'HV 644', 6886130, 106, 'HV 62', '2012-01-01 12:33:00'),
  (NewID(), 104, 6897913, 'HV 644', 6886130, 106, 'HV 62', '2012-01-01 12:39:00')

所以使用上面的数据集,我的结果理想地分组如下;

第 1 行和第 2 行被分组,因为 objectid 和 displayid 相同,并且第 2 行出现在第 1 行的 5 分钟内,数据集中没有其他行包含相同的 displayid 和 objectid 以及组最新 5 分钟内的时间戳时间戳(第 2 行)所以..

第 3 行自行分组,因为在该组最新时间戳(第 3 行)的 5 分钟内,数据集中没有 displayid 和 objectid 匹配的行。

第 4、5 和 6 行被分组,因为 displayid 的匹配、objectid 的匹配和行时间戳在最后一行的 5 分钟内,第 5 行的时间戳在第 4 行的 5 分钟内,第 6 行的时间戳在行的 5 分钟内5个。

第 7 行和第 8 行被分组,因为 objectid 和 displayid 相同,并且第 8 行的时间戳在该组最新时间戳(第 7 行)的 5 分钟内。

第 9 行自行分组,因为在该组最新时间戳的 5 分钟内,数据集中没有显示 ID 和 objectid 匹配的行

*我使用的是 SQL Server 2008 R2

4

1 回答 1

0

感谢您的查看和您的建议,这个解决方案对我来说效果很好......

WITH 
    cte_remove AS (
SELECT b.*
FROM dbo.examplelog a
INNER JOIN dbo.examplelog b ON
    a.ID != b.ID AND
    a.DISPLAYID = b.DISPLAYID AND 
    a.OBJECTID = b.OBJECTID AND 
    b.[timestamp] BETWEEN a.[timestamp] AND DATEADD(SECOND, 300, a.[timestamp])
),
   cte_results AS (
SELECT * FROM dbo.examplelog EXCEPT 
SELECT * FROM cte_remove 
)
SELECT * FROM cte_results ORDER BY [timestamp]
GO
于 2012-04-17T23:06:30.183 回答