Sql 在两个日期之间搜索周/月记录计数(数字)和周/月的开始日期+结束日期(日期时间)

Sql 在两个日期之间搜索周/月记录计数(数字)和周/月的开始日期+结束日期(日期时间),sql,sql-server,search,temp-tables,Sql,Sql Server,Search,Temp Tables,我有一个与我之前发布的问题相关的问题:- 我想有每周和每月的电话计数,每天的问题得到解决 问题编号@1:每周呼叫计数以及每周的开始日期和结束日期 我已经在下面提到的查询中搜索了一周的开始日期和结束日期,包括他们各自的通话次数。但问题是,我无法在一个表中得到结果,尽管我使用了临时表telletable+telletable2。请在这方面帮助我 注意:表创建被注释为多次执行 --CREATE TABLE #TempTable(StartDate datetime,EndDate datetime,C

我有一个与我之前发布的问题相关的问题:-

我想有每周和每月的电话计数,每天的问题得到解决

问题编号@1:每周呼叫计数以及每周的开始日期和结束日期

我已经在下面提到的查询中搜索了一周的开始日期和结束日期,包括他们各自的通话次数。但问题是,我无法在一个表中得到结果,尽管我使用了临时表telletable+telletable2。请在这方面帮助我

注意:表创建被注释为多次执行

--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 

我相信下面三个简单的查询就足以满足您的需要

每日

周报

月刊


查找记录月份的简单查询。。。。。
选择发票号、创建日期、创建月份、计数发票号、从销售中计数发票号,其中公司id='.10'和status=Approved AND yearcreated\u at=yearcurdate group by monthcreated\u atenter code在此

如果您为每个用例发布一些示例输入和输出,您可能会得到更好的帮助。@Lieven:我之前已经完成了您的回答,但我的要求不仅仅是搜索每周或每月的计数。我必须显示开始日期和结束日期,包括特定范围的计数。周:-开始日期结束日期计数2010年1月15日2010年1月22日2010年1月21日2010年1月22日2010年1月29日73上述结果将以单独的结果出现,我想将它们合并并放入单个结果中。我的意思是,通过我的查询,这些结果在不同的结果窗口中一一出现。每月:-开始日期结束日期2010年1月1日2010年2月118日2010年2月1日2010年3月84
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)