2016-09-03 99 views
1

我有一點不尋常的問題。我使用Python將一些數據寫入文本文件,然後使用Tableau從中讀取並生成可視化文件。我將查詢結果按周分組以減少輸出文件的大小。我認爲SQL對於這種類型的操作非常標準。Netezza按周開始(星期日)和月開始分組

SELECT [Date] - EXTRACT(DOW FROM [Date]) + 1 
[this gives me the Sunday of the week for any date] 

但是,我偶爾想要按月而不是按星期分組,這對於當前輸出是不可能的。我想要的是對查詢進行修改,除非一個星期重疊兩個月,否則將按星期分組。如果本週與兩個月重疊,則會將結果拆分爲第一個月的第一部分,然後是第二個月的第二部分。這樣一來,只需將Tableau中的日期分組,即可使用輸出顯示每週結果或每月/每季度/每年的結果。

有沒有人處理過這樣的問題?

作爲說明,請考慮以下值。

2016-08-21 1 
2016-08-22 1 
2016-08-23 1 
2016-08-24 1 
2016-08-25 1 
2016-08-26 1 
2016-08-27 1 
2016-08-28 1 
2016-08-29 1 
2016-08-30 1 
2016-08-31 1 
2016-09-01 1 
2016-09-02 1 
2016-09-03 1 
2016-09-04 1 
...   ... 

我想代碼輸出以下值:

2016-08-21 7 
2016-08-28 4 
2016-09-01 3 
2016-09-04 1... 

將非常感謝您的幫助!

+0

將數據加載到Tableau的日常級別並在那裏進行日期操作。 –

+0

是的,這是一個選項,但我試圖避免它由於數據量。按周/月分組會使Tableau數據文件處理大小的1/6(​​或者類似的情況,不確定具體的值,但它會小得多) – SeaChange

回答

2

基於googled Netzetta syntax,這可能是工作:

select 
min([Date]) as MinDate, count(*) as TotalDays 
from YourTable 
group by 
extract(year from [Date]), 
extract(month from [Date]), 
(case 
when extract(dow from [Date]) = 1 -- dow 1 is sunday 
then extract(week from [Date]) + 1 -- week starts on monday 
else extract(week from [Date]) 
end); 

或作爲意見提出,在星期天組:

select 
min([Date]) as MinDate, count(*) as TotalDays 
from YourTable 
group by 
([Date] - (extract(dow from [Date]) - 1)); 
+0

是的,我不知道爲什麼它沒有黎明對我來說,只是最低限度的聚合日期,然後按月和周分組。尚未測試,但以下應該工作:GROUP BY EXTRACT(MONTH FROM [Date]),[Date] - EXTRACT(DOW FROM [Date])+ 1 – SeaChange

+0

僅在星期日分組也是有效的,更短的方法。在我的高爾夫球編碼批准;)我已經添加到答案。 – LukStorms

0

下面是我使用的最終代碼。

CASE 
WHEN EXTRACT(MONTH FROM [Date]) <> EXTRACT(MONTH FROM [Date] - EXTRACT(DOW FROM [Date]) + 1) 
THEN DATE_TRUNC('month', [Date]) 
ELSE [Date] - EXTRACT(DOW FROM [Date]) + 1 END 

然後我分組在這個領域。 它的工作方式是檢查日期的月份是否等於星期開始的月份。如果不是,則返回該月的第一天。如果是,則返回一週開始。此代碼返回原始帖子中示例中的值。

相關問題