Я бы отредактировал вашу хранимую процедуру, чтобы передать дату начала и дату окончания, выбранные на вашей веб-странице, чтобы вы могли включить их в предложение WHERE
.
-- Daily
SELECT CallTime, COUNT(*) AS 'Records Found'
FROM TRN_Call
WHERE CallTime BETWEEN @StartDate AND @EndDate
GROUP BY CallTime
Еженедельно может быть довольно сложным.
Если вы отметите эту ссылку , вы увидите функцию (ниже), которую вы можете использовать для получения еженедельных результатов
например. Так что создайте функцию ниже
create function FiscalWeek (@startMonth varchar(2), @myDate datetime)
returns int
as
begin
declare @firstWeek datetime
declare @weekNum int
declare @year int
set @year = datepart(year, @myDate)+1
--Get 4th day of month of next year, this will always be in week 1
set @firstWeek = convert(datetime, str(@year)+@startMonth+'04', 102)
--Retreat to beginning of week
set @firstWeek = dateadd(day, (1-datepart(dw, @firstWeek)), @firstWeek)
while @myDate < @firstWeek --Repeat the above steps but for previous year
begin
set @year = @year - 1
set @firstWeek = convert(datetime, str(@year)+@startMonth+'04', 102)
set @firstWeek = dateadd(day, (1-datepart(dw, @firstWeek)), @firstWeek)
end
set @weekNum = (@year*100)+((datediff(day, @firstweek, @myDate)/7)+1)
return @weekNum
end
Теперь вы сможете запустить приведенный ниже код, сгруппированный по неделям. Чтобы выбрать между днем, неделей или годом, вам также придется передать выбранный пользователем период в вашу хранимую процедуру.
(пс. Еще не успели сделать год)
SELECT dbo.FiscalWeek('04', CallTime), dbo.FiscalWeek('04', CallTime)%100 , COUNT(*) AS 'Records Found - Weekly'
FROM TRN_Call
WHERE CallTime BETWEEN @StartDate AND @EndDate
GROUP BY dbo.FiscalWeek('04', CallTime), dbo.FiscalWeek('04', CallTime)%100