Поиск записей по неделям / месяцам (число) и StartDate + EndDate (дата / время) недели / месяца с поиском между двумя датами - PullRequest
0 голосов
/ 26 марта 2010

У меня есть вопрос в связи с ранее заданным мной вопросом: -

Поиск по количеству записей за день / неделю / месяц с помощью StoredProcedure

Я хочу, чтобы количество вызовов еженедельно и ежемесячно решалось ежедневно.

НОМЕР ВЫПУСКА @ 1: еженедельное количество вызовов, а также даты начала и окончания недели

Я искал даты начала и окончания недели, включая их индивидуальное количество вызовов, а также в указанном ниже запросе. Но проблема в том, что я не смог получить результат в одной таблице, хотя я использовал временные таблицы (# TempTable + # TempTable2). Пожалуйста, помогите мне в этом.

ПРИМЕЧАНИЕ. Создание таблицы прокомментировано как выполнение более одного раза.

--CREATE TABLE #TempTable(StartDate datetime,EndDate datetime,CallCount numeric(18,5))

--CREATE TABLE #TempTable2(StartDate datetime,EndDate datetime,CallCount numeric(18,5))

DECLARE @StartDate datetime,@EndDate datetime,@StartDateTemp1 datetime,@StartDateTemp2 datetime,@EndDateTemp datetime,@Period varchar(50);

SET @StartDate='1/1/2010';  SET @EndDate='2/28/2010';

SET @StartDateTemp1=@StartDate; SET @StartDateTemp2=DATEADD(dd, 7, @StartDate ); 

SET @Period='Weekly';

IF (@Period = 'Weekly')
BEGIN
    WHILE ((@StartDate <= @StartDateTemp1) AND (@StartDateTemp2 <= @EndDate))
        BEGIN
        IF((@StartDateTemp1 < @StartDateTemp2 ) AND (@StartDateTemp1 != @StartDateTemp2) )
            BEGIN
                    SELECT 
                    convert(varchar, @StartDateTemp1, 106) AS 'Start Date',
                    convert(varchar, @StartDateTemp2, 106) AS 'End Date',
                    COUNT(*) AS 'Call Count'
                    FROM TRN_Call
                    WHERE (CallTime >=  @StartDateTemp1 AND CallTime <= @StartDateTemp2 );
             END 
                    SET @StartDateTemp1 = DATEADD(dd, 7, @StartDateTemp1);
                    SET @StartDateTemp2 = DATEADD(dd, 7, @StartDateTemp2);
        END

END 

НОМЕР ВЫПУСКА @ 2: ежемесячный счетчик вызовов, даты начала и окончания недели В этом случае у меня тот же поиск, но мне придется искать количество вызовов плюс начальную и конечную даты месяца. Пожалуйста, помогите мне в этом также.

DECLARE @StartDate datetime,@EndDate datetime,@StartDateTemp1 datetime,@StartDateTemp2 datetime,@EndDateTemp datetime,@Period varchar(50);
SET @StartDate='1/1/2010';  SET @EndDate='4/1/2010';    SET @StartDateTemp1=@StartDate; 
--SET @StartDateTemp2=@StartDate;
SET @StartDateTemp2=DATEADD(mm, 1, @StartDate ); 
SET @Period='Monthly';

IF (@Period = 'Monthly')
BEGIN
    WHILE ((@StartDate <= @StartDateTemp1) AND (@StartDateTemp2 <= @EndDate))
        BEGIN
        IF((@StartDateTemp1 < @StartDateTemp2 ) AND (@StartDateTemp1 != @StartDateTemp2) )
            BEGIN
                    SELECT 
                    convert(varchar, @StartDateTemp1, 106) AS 'Start Date',
                    convert(varchar, @StartDateTemp2, 106) AS 'End Date',
                    COUNT(*) AS 'Call Count'
                    FROM TRN_Call
                    WHERE (CallTime >=  @StartDateTemp1 AND CallTime <= @StartDateTemp2 );
             END 
                    SET @StartDateTemp1 = DATEADD(mm, 1, @StartDateTemp1);
                    SET @StartDateTemp2 = DATEADD(mm, 1, @StartDateTemp2);
        END

END 

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Я считаю, что следующих трех простых запросов достаточно для того, что вам нужно.

Daily

SELECT    [Day] = CAST(CAST(CallTime AS INTEGER) AS DATETIME)
          , [Call Count] = COUNT(*)
FROM      TRN_Call
WHERE     CallTime BETWEEN @StartDate AND @EndDate
GROUP BY  CAST(CAST(CallTime AS INTEGER) AS DATETIME)

Еженедельные

SELECT    [Week] = DATEPART(ww, CallTime)
          , [Year] = DATEPART(yy, CallTime)
          , [Call Count] = COUNT(*)
FROM      TRN_Call
WHERE     CallTime BETWEEN @StartDate AND @EndDate
GROUP BY  DATEPART(ww, CallTime), DATEPART(yy, CallTime)

Ежемесячный

SELECT    [Month] = DATEPART(mm, CallTime)
          , [Year] = DATEPART(yy, CallTime)
          , [Call Count] = COUNT(*)
FROM      TRN_Call
WHERE     CallTime BETWEEN @StartDate AND @EndDate
GROUP BY  DATEPART(mm, CallTime), DATEPART(yy, CallTime)
0 голосов
/ 30 октября 2017

Простой запрос для поиска записей по месяцам ..... ВЫБЕРИТЕ invoice_no, созданный_ат, месяц (создан_ат) month_no, количество (invoice_no) sale_count ОТ sales_invoice ГДЕ company_id = '.10. 'AND status = "Утверждено" и год (create_at) = год (curdate ()) группа по месяцам (созданный_at) enter code here

...