У меня есть таблица журналов, используемая для устройства «heartbeats». У меня есть эти сетевые устройства, которые регистрируют/пускают с сервером каждые 10 минут. Нам нужна статистика, когда они пропускают запланированное время регистрации. У меня есть запрос, который может сделать это для каждого устройства, но мне нужно, чтобы он был модифицирован для обработки на всех устройствах.SQL Query для агрегирования DateDiff больше заданного значения
Сердцебиение таблица выглядит следующим образом:
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]
проверки устройства на сервер, сервер добавляет строку в эту таблицу с Ид, CheckinTime и времени автономной работы устройства (значение аппаратного посланный устройства). Запрос я в настоящее время выглядит следующим образом:
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;
Этот запрос ограничивается одним указанным устройством. Примеры результатов выглядят так:
stats
----------------- ----
< 10 minutes: 1536
10 - 11 minutes: 425
11 - 12 minutes: 952
+12 minutes: 160
В идеале, я занимаюсь только регистрацией более 12 минут. Итак, что я хотел, был список устройств, у которых есть чек-записи более 12 минут, заказанные по их подсчетам. Это позволит мне увидеть 10 или 20 ведущих устройств с более чем 12-минутным временем регистрации, предупреждая меня о проблемных устройствах. Что-то вроде:
DeviceId CheckinsOver12Mins
---------- -------------------
1112 160
1108 152
15 114
106 86
Предложения?
Это работает! Большое спасибо. –
YW, Мое удовольствие. – Hogan