장치 "하트 비트"에 사용되는 로깅 테이블이 있습니다. 10 분마다 서버와 체크인/하트 비트하는 네트워크 장치가 있습니다. 예약 된 체크인 시간을 놓친 경우 통계를 원합니다. 나는 장치별로 이것을 할 수있는 쿼리를 가지고 있지만 모든 장치에서 처리하도록 수정해야한다.주어진 값보다 큰 DateDiff를 집계하는 SQL 쿼리
하트 비트 테이블은 다음과 같다 : 서버에
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 분 넘게 체크인을 한 기기 목록이었습니다. 이렇게하면 문제가있는 장치를 알려주는 12 분 이상의 체크인 시간을 가진 상위 10 개 또는 20 개의 장치를 볼 수 있습니다. 다음과 같음 :
DeviceId CheckinsOver12Mins
---------- -------------------
1112 160
1108 152
15 114
106 86
제안 사항?
! 매우 고맙습니다. –
YW, 저의 기쁨. – Hogan