2015-05-04 25 views
0

我需要按月和年總計銷售數量,但我的數據庫有一些重複的條目。我知道這並不理想,但它是一個政府數據庫,所以我無法修復它。該數據庫有大量的記錄(> 2億),所以我不想按ID進行分組。總計一個字段,但僅適用於唯一ID

這裏基本上是我想做的事:

select YEAR(begin_date) as yr, MONTH(begin_date) as mnth, SUM(quantity) as quant 
from Table 
[where transactionID is unique] 
group by YEAR(begin_date), MONTH(begin_date) 
order by YEAR(begin_date), MONTH(begin_date) 

得到的數據應該是這樣的,但不包括重複:

yr mnth quant 
2009 10 91241 
2009 11 23650 
2009 12 37006 
2010 1 19770 
2010 2 19937 
2010 3 14403 
+1

是否要排除具有重複項的條目? – potashin

+1

...或者你想按日期進行第一次輸入嗎? –

+0

我想排除重複項(按交易ID),但我想按月和年進行彙總和分組。 – jczannis

回答

0

您可以使用內選擇了刪除重複在一年的一個月內重複的交易ID,如下所示:

SELECT [year], [month], SUM(quantity) 
FROM (SELECT DISTINCT 
      YEAR(begin_date) as [year], MONTH(begin_date) as [month], MAX(quantity) as [quantity], transactionID 
     FROM yourTable 
     GROUP BY 
      YEAR(begin_date) as [year], MONTH(begin_date), transactionID) DT 
GROUP By [year], [month] 
ORDER BY [year], [month] 
+0

謝謝。這指出了我正確答案的方向。我想要數量的總和,而不僅僅是最大值。這裏有什麼工作:'選擇YEAR(dte),MONTH(dte),SUM(quant) from(選擇不同的begin_date作爲dte,數量作爲quant,交易ID \t from表)DT group by YEAR(dte),MONTH dte) order by YEAR(dte),MONTH(dte)' – jczannis

0

假設你表有一個唯一的主鍵,您可以使用CTE來確定重複項,只需選擇一個即可使用。我也支持一個有一些設計問題的數據庫,並且使用這個技巧很多來過濾愚蠢。

;with uniques AS (PK,Number) (
    SELECT 
     PrimaryKey, 
     ROW_NUMBER() OVER(PARTITION BY YEAR(begin_date),MONTH(begin_date) ORDER BY YEAR(begin_date)) as number 
    FROM Table 
) 
select YEAR(begin_date) as yr, MONTH(begin_date) as mnth, SUM(quantity) as quant 
from Table t 
INNER JOIN uniques u 
    ON u.pk = t.PrimaryKey 
    AND u.number = 1 
group by YEAR(begin_date), MONTH(begin_date) 
order by YEAR(begin_date), MONTH(begin_date) 
+0

這是一個有創意的解決方案,我認爲它可以在一張小桌子上工作。我跑了一個月作爲測試,跑了大約15分鐘後,我殺了它。我必須承認我不明白你在做什麼,所以我花了一些時間閱讀關於分區的內容。如果沒有別的,我已經傾向了一些新東西。謝謝你的幫助。 – jczannis

相關問題