Netezza 按周开始(星期日)和月开始分组

Netezza Grouping by Week Start (Sunday) AND Month Start

我有一个不寻常的问题。我正在使用 Python 将一些数据写入一个文本文件,然后我使用 Tableau 从中读取数据并构建可视化效果。我按周对查询结果进行分组,以减小输出文件的大小。我认为 SQL 是此类操作的标准。

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

但是,我偶尔想按月而不是周分组,这对于当前输出是不可能的。我想要的是对查询的修改,该查询将按周分组,但当一周与两个月重叠时除外。如果一周与两个月重叠,它会将结果拆分为第一个月的一周的第一部分,然后是第二个月的一周的第二部分。这样,我们可以使用输出来显示每周结果或 monthly/quarterly/yearly 结果,只需在 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,这可能有效:

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

这是我使用的最终代码。

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

然后我在那个字段上分组。 它的工作方式是检查日期的月份是否等于一周开始的月份。如果不是,则 returns 该月的第一天。如果是,则 returns 周开始。此代码 returns 来自原始示例中的值 post.