2016-09-03 14 views
1

私は少し珍しい質問があります。私はPythonを使ってテキストファイルにいくつかのデータを書き込んでいます。それからTableauを使って読み込みと可視化を行います。私は出力ファイルのサイズを減らすために、クエリ結果を週ごとにグループ化しています。私はSQLがそのタイプの操作のためのかなり標準だと思う。週別Netezzaグループ化開始日(日曜日)および月間開始

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

ただし、現在の出力では不可能な場合もありますが、週単位ではなく月単位でグループ化することがあります。私が望むのは、1週間が2ヶ月間オーバーラップする場合を除いて、週別にグループ化するクエリの変更です。週が2か月間に重なると、結果は最初の月の最初の部分と2番目の月の週の2番目の部分に分割されます。このようにして、結果を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... 

が本当に任意のヘルプをお願い申し上げます! googled Netzetta syntaxに基づいて

+0

データをTableauに毎日ロードし、そこで日付を操作します。 –

+0

ええ、それはオプションですが、私はデータの量のためにそれを避けようとしています。週単位でグループ化すると、データファイルTableauがサイズの1/6(またはそのようなもの、正確な値はわかりませんが、はるかに小さくなります)に処理されます。 – SeaChange

答えて

2

、これは仕事ができる:

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(月から[日付])、[日付] - 抽出(DOW FROM [日付])+ 1 – SeaChange

+0

日曜日のみのグループ化も有効です。短い方法。私の中のgolfcoderが承認します;)私は答えにそれを加えました。 – 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 

次に、私はそのフィールドをグループ化しました。 動作の仕方は、日付の月が月の開始日と等しいかどうかをチェックすることです。そうでなければ、月の最初の日を返します。そうであれば、週の開始を返します。このコードは、例の値を元の投稿から返します。

関連する問題