현재 웹 응용 프로그램에 대한 방문을 기록하는 테이블이 있고 보고서를 작성할 수있는 코드를 작성하려고합니다. 시각화). 내가 원하는 것은 지난 24 시간 동안 매 10 분 간격으로 방문 횟수를 표시하는 것입니다.Sql Server : 10 분 간격으로 레코드 수를 계산합니다.
나는 그 일을하는 쿼리가 있지만 방문이없는 10 분 간격이 있으며 이러한 쿼리의 간격을 0으로 표시하도록 쿼리를 조정하고 싶습니다. 나는 커서를 사용하여 무언가를 생각해 낼 수 있다고 생각하지만, 피할 수 있다면 커서를 사용하지 않을 것입니다.
INSERT INTO track_pageSubmit (popid,section,page,requestbegin,requestend,rendered,postbegin,postend)
SELECT '2393712','Main_Can_Eng','10','2010-01-22 10:22:08.287','2010-01-22 10:22:08.330',NULL,'2010-01-22 10:22:09.503','2010-01-22 10:22:09.627' UNION
SELECT '2393712','Main_Can_Eng','11','2010-01-22 10:22:09.660','2010-01-22 10:22:09.770',NULL,'2010-01-22 10:22:10.973','2010-01-22 10:22:11.050' UNION
SELECT '2393712','Main_Can_Eng','12','2010-01-22 10:22:11.080','2010-01-22 10:22:11.143',NULL,'2010-01-22 10:22:12.503','2010-01-22 10:22:12.567' UNION
SELECT '2394478','main','21','2010-01-21 10:38:54.057','2010-01-21 10:38:54.117','2010-01-21 10:38:54.487','2010-01-21 10:38:55.633','2010-01-21 10:38:55.697' UNION
SELECT '2394478','main','22','2010-01-21 10:38:55.757','2010-01-21 10:38:55.820','2010-01-21 10:38:56.197','2010-01-21 10:38:57.477','2010-01-21 10:38:57.570' UNION
SELECT '2394478','main','23','2010-01-21 10:38:57.617','2010-01-21 10:38:57.993','2010-01-21 10:38:58.367','2010-01-21 10:38:59.397','2010-01-21 10:38:59.493' UNION
SELECT '2394478','main','25','2010-01-21 10:38:59.553','2010-01-21 10:38:59.617','2010-01-21 10:38:59.993','2010-01-21 10:39:01.227','2010-01-21 10:39:01.303' UNION
SELECT '2394478','main','26','2010-01-21 10:39:01.350','2010-01-21 10:39:01.477','2010-01-21 10:39:01.860','2010-01-21 10:39:02.787','2010-01-21 10:39:02.867' UNION
SELECT '2394478','main','27','2010-01-21 10:39:02.930','2010-01-21 10:39:03.007','2010-01-21 10:39:03.400','2010-01-21 10:39:04.147','2010-01-21 10:39:04.460' UNION
SELECT '2394478','main','28','2010-01-21 10:39:04.507','2010-01-21 10:39:05.147','2010-01-21 10:39:05.790','2010-01-21 10:39:19.413','2010-01-21 10:39:19.477' UNION
SELECT '2393754','exp46_cex','1','2010-01-22 12:40:56.563','2010-01-22 12:40:56.640',NULL,'2010-01-22 12:40:58.657','2010-01-22 12:40:58.733' UNION
SELECT '2393754','exp46_cex','2','2010-01-22 12:40:58.750','2010-01-22 12:40:58.780',NULL,'2010-01-22 12:41:15.623','2010-01-22 12:41:15.657' UNION
SELECT '2393754','additionalComments','1','2010-01-22 12:41:15.670','2010-01-22 12:41:15.733',NULL,'2010-01-22 12:41:19.000','2010-01-22 12:41:19.030' UNION
SELECT '2393802','main','2','2010-01-22 12:44:50.857','2010-01-22 12:44:50.933',NULL,'2010-01-22 12:44:53.497','2010-01-22 12:44:53.557' UNION
SELECT '2393802','main','3','2010-01-22 12:44:53.590','2010-01-22 12:44:53.667',NULL,'2010-01-22 12:44:56.370','2010-01-22 12:44:56.730'
보너스 포인트 :
CREATE TABLE [dbo].[Track_PageSubmit](
[id] [int] IDENTITY(1,1) NOT NULL,
[popid] [int] NOT NULL,
[section] [varchar](30) NULL,
[page] [int] NULL,
[requestBegin] [datetime] NULL,
[requestEnd] [datetime] NULL,
[rendered] [datetime] NULL,
[postBegin] [datetime] NULL,
[postEnd] [datetime] NULL
)
그리고 여기이 기록의 일부처럼 보일 것입니다 : 여기
DECLARE @time int
DECLARE @interval int
SELECT @time=96
SELECT @interval=10
SELECT interval,
COUNT(*) AS requestCount,
DATEDIFF(MINUTE,DATEADD(HOUR,-1*@time-1,getDate()),interval)/@interval AS intervalPos
FROM
(SELECT DATEADD(MINUTE, FLOOR(DATEDIFF(MINUTE, getDate(), requestBegin)/(@interval*1.0)) * @interval,getDate())
FROM [track_pageSubmit] WHERE requestBegin IS NOT NULL AND DATEDIFF(HOUR,requestBegin,getDate()) < @time) AS I(interval)
GROUP BY interval ORDER BY interval
테이블 구조입니다 : 여기
지금까지 쿼리입니다 (저에게 감사드립니다.) 쿼리를 변경할 수있는 누구에게도 간격마다 고유 한 항목을보고 할 수 있습니다 (추가로 총 요청 수).
감사합니다.
죄송합니다. 저는 대표적인 데이터를 수집하고있었습니다. 나는 간격을 확인하는 것을 잊었다. –
이것은 아름답게 작동했습니다. 고맙습니다. –