2016-09-03 4 views
1

약간의 특이한 질문이 있습니다. 파이썬을 사용하여 텍스트 파일에 데이터를 작성한 다음 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 
([Date] - (extract(dow from [Date]) - 1)); 
+0

그래, 왜 그렇지 않은지 모르겠다. 새벽에 최소한 날짜별로 집계 한 다음 월별 및 주별로 그룹화하십시오. 아직 테스트하지 않았지만 다음 항목이 작동해야합니다. GROUP BY EXTRACT ([MONTH FROM [날짜]), [DATE] - EXTRACT (DOW FROM [Date]) + 1 – SeaChange

+0

일요일에만 그룹화하는 것은 유효하고 심지어 짝수입니다 더 짧은 방법. 내 golfcoder가 승인;) 나는 대답에 그것을 추가했습니다. – LukStorms

0

여기 내가 사용하는 최종 코드는 다음과 같습니다

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

또는 의견 제안, 일요일에 그룹 .

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 

그런 다음 해당 필드를 그룹화했습니다. 작동 방식은 날짜의 달이 매주 시작하는 달인지 확인하는 것입니다. 그렇지 않으면, 그 달의 첫 번째 날을 반환합니다. 맞으면 주 시작을 반환합니다. 이 코드는 예제의 값을 원래 게시물에서 반환합니다.

관련 문제