استعلام SQL لمجموعة Datediff أكبر من القيمة المعطاة
سؤال
لدي جدول تسجيل يستخدم للجهاز "نبضات القلب". لدي أجهزة الشبكة هذه التي تسوق/نبضات القلب مع الخادم كل 10 دقائق. نريد إحصائيات حول وقت تفويت وقت تسجيل الوصول المجدول. لدي استعلام يمكنه القيام بذلك على أساس كل جهاز ، لكنني بحاجة إلى تعديله للتعامل مع جميع الأجهزة.
يبدو أن طاولة نبضات القلب:
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
اقتراحات؟
المحلول
نطاق القاعدة:
-
إذا قمت بتعريفها في خدمة البحث، فستكون صالحة للجميع WebApplications المرتبطة بخدمة البحث هذه.
-
إذا قمت بتحديده على مستوى موقع فرعي / ويب، صالحه للسياق البحث المحرز على هذا الموقع.
-
إذا قمت بتعريفه على مجموعة الموقع صالح للموقع وجميع المواقع الفرعية.