Consulta SQL para agregar datdiff maior do que o valor determinado
Pergunta
Eu tenho uma tabela de madeira usada para o dispositivo "batimentos cardíacos". Eu tenho esses dispositivos de rede que check-in/batimento cardíaco com o servidor a cada 10 minutos. Estamos querendo estatísticas sobre quando eles perderem o horário de check-in programado. Eu tenho uma consulta que pode fazer isso por dispositivo, mas preciso que seja modificada para manusear em todos os dispositivos.
A mesa de batimentos cardíacos se parece com o seguinte:
CREATE TABLE [dbo].[DeviceHeartbeat](
[Id] [int] IDENTITY(1,1) NOT NULL,
[DeviceId] [int] NULL,
[CheckinTime] [datetime] NULL,
[Runtime] [int] NULL,
PRIMARY KEY CLUSTERED
([Id] ASC)) ON [PRIMARY]
O dispositivo verifica o servidor, o servidor adiciona uma linha a esta tabela com seu ID, o checkIntime e o tempo de execução do dispositivo (um valor de hardware enviado pelo dispositivo). A consulta que tenho atualmente se parece com a seguinte:
WITH t AS
(
SELECT Checkintime, rn = ROW_NUMBER() OVER (ORDER BY Checkintime)
FROM DeviceHeartbeat
WHERE DeviceId = 1112
),
x AS
(
SELECT d = DATEDIFF(MINUTE, t1.Checkintime, t2.Checkintime)
FROM t AS t1
INNER JOIN t AS t2
ON t1.rn = t2.rn - 1
),
y AS
(
SELECT stats = CASE WHEN d < 10 THEN ' < 10 '
WHEN d BETWEEN 10 AND 11 THEN '10 - 11 '
WHEN d BETWEEN 11 AND 12 THEN '11 - 12 '
ELSE '+12 ' END + ' minutes:'
FROM x
)
SELECT stats, COUNT(*) FROM y GROUP BY stats;
Esta consulta é limitada a um único dispositivo especificado. Exemplo de resultados são assim:
stats
----------------- ----
< 10 minutes: 1536
10 - 11 minutes: 425
11 - 12 minutes: 952
+12 minutes: 160
Idealmente, estou preocupado apenas com check-ins com mais de 12 minutos. Então, o que eu estava querendo era uma lista de dispositivos que fizeram check-ins com mais de 12 minutos, ordenados por suas contagens. Isso me permitirá ver os 10 ou 20 dispositivos principais que têm mais de 12 minutos de check-in, alertando-me para dispositivos problemáticos. Algo como:
DeviceId CheckinsOver12Mins
---------- -------------------
1112 160
1108 152
15 114
106 86
Sugestões?
Solução
O escopo da regra:
-
Se você defini-los no serviço de pesquisa, é válido para todos webplications associados a esse serviço de pesquisa.
-
Se você defini-lo no nível subsite / web, é válido para o contexto pesquisa feita nesse site.
-
Se você defini-lo na coleção do site é Válido para o site e todos os subsites.