2010-03-26 87 views
0

我有一個問題與我之前發佈的此問題有關: -在兩個日期之間搜索周/明月記錄計數(數字)和周/月的StartDate + EndDate(日期時間)

Daily/Weekly/Monthly Record Count Search via 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 @[email protected]; 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 @[email protected]; 
--SET @[email protected]; 
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 
+1

如果您爲每個用例發佈了一些示例輸入和輸出,您可能會得到更好的幫助。 – 2010-03-26 13:27:35

回答

1

我相信以下三個簡單的查詢就足以滿足您的需求。

日報

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

@Lieven:我以前做過這個,你已經回答了,但我的要求不僅僅是搜索每週或每月的計數。我必須顯示特定範圍的開始日期和結束日期(包括計數) 。 周: - 啓動日期結束日期計數 2010年1月15日\t 2010年1月22日 2010年1月22日2010 \t 01月29日 上述這些結果在不同的結果來了,我想將它們結合起來,投入單一結果。我的意思是,通過我的查詢,這些結果在不同的結果窗口中逐一出現。 每月: - 啓動日期結束日期計數 2010年1月1日\t 2010年2月1日 2010年2月1日\t 2010年3月1日\t 84 – 2010-03-26 13:34:53

0

簡單的查找記錄查詢山h明智..... SELECT invoice_no,created_at,month(created_at)month_no,count(invoice_no)sale_count FROM sales_invoice WHERE company_id ='.10。 'AND status =「已批准」和年份(created_at)=年份(curdate())按月份(created_at)enter code here

相關問題