2016-09-30 3 views
0

날짜 형식의 열을 갖는 레코드가있는 Half-Yearly를 기반으로 데이터를 나누는 MySQL 쿼리를 작성할 수 있습니까?MySQL 테이블 데이터를 반년 집계하는 방법은 무엇입니까?

GROUP for Monthly 및 Quarterly로 작성했지만 반년마다 발생하지는 않습니다.

나는, 주간, 월간 및 분기의 다음 쿼리를 사용 :

CREATE view darren_inventory_mrp_forecast_summary as 
    (SELECT row_number() OVER(ORDER BY sub.product_id) as id, 
      SUM(sub.quantity)/12 as quantity, 
      SUM(sub2.quantity)/4 as quarterly, 
      SUM(sub3.quantity)/51 as weekly, 
      sub.product_id as product_id FROM 
      (SELECT row_number() OVER(ORDER BY product_id) as id, 
        product_id as product_id, 
        SUM(product_qty) as quantity 
      FROM stock_move 
      WHERE consumed_for IS NOT NULL 
      GROUP BY to_char(DATE(create_date), 'YYYY-MM'), product_id 
     ) 
     as sub 
     LEFT JOIN 
      (SELECT row_number() OVER(ORDER BY product_id) as id, 
        product_id as product_id, 
        SUM(product_qty) as quantity 
      FROM stock_move 
      WHERE consumed_for IS NOT NULL 
      GROUP BY to_char(DATE(create_date), 'YYYY-Q'), product_id 
     ) 
     as sub2 on (sub2.product_id=sub.product_id) 
     LEFT JOIN 
      (SELECT row_number() OVER(ORDER BY product_id) as id, 
        product_id as product_id, 
        SUM(product_qty) as quantity 
      FROM stock_move 
      WHERE consumed_for IS NOT NULL 
      GROUP BY to_char(DATE(create_date), 'YYYY-WW'), product_id 
     ) 
     as sub3 on (sub3.product_id=sub.product_id) 
     GROUP BY sub.product_id 
    ) 
+0

왜 반기에 대한 코드가 작동 당신이 그것을 분기 근무하지 않은 경우? 코드 게시! 네가 그것을 실행할 때 어떻게 될까? – Robert

+0

GROO BY yearOf (timestamp), monthOf (timestamp)> 6은 어떨까요? 물론 yearOf와 monthOf 함수는 좋지 않습니다. 문서에서 작동하는 구문을 찾아야합니다. – peterh

+0

질문이 업데이트되었습니다. 이제 반년 동안 같은 것을 찾고 싶습니다. – user32876

답변

2

당신은 날짜 항목이 발생하는 달 1 일을 얻을 수 있습니다.

select last_day(datecolumn) + interval 1 day - interval 1 month 

당신은 당신이

같은 반 년 (0-5)에 개월 수를 얻을 수있는이

select month(datecolumn) 

와 날짜 항목의 연도의 월을 얻을 수 있습니다

select (month(datecolumn) -1) mod 6 

이렇게하면 반년의 첫날을 얻을 수 있습니다.

select last_day(datecolumn) + interval 1 day - interval 1 month 
     - interval (month(datecolumn) -1) mod 6 month 

그러면 큰 식으로 GROUP BY하고 데이터를 그렇게 요약 할 수 있습니다.

이것은 또한 작동합니다

select last_day(datecolumn) + interval 1 day - interval 1 month 
     - interval (quarter(datecolumn) -1) mod 2 quarter 

트릭이 거짓말하는 반 년의 첫 날에 대한 날짜 표현을 절단 식을 마련하는 것입니다.

특정 연도의 물건 만 처리하려면 다음과 같이하십시오.

WHERE datecolumn >= DATE_FORMAT(NOW(), '%y-01-01') - INTERVAL 1 YEAR 
    AND datecolumn > DATE_FORMAT(NOW(), '%y-01-01') + INTERVAL 1 YEAR 

이 특별한 예는 식 DATE_FORMAT(someTimestampValue, '%y-01-01')는 연도의 시작 날짜 또는 날짜 값을 자릅니다 2015 년 2016 년 달력 년에 모든 것을 선택한다.

+0

지난 12 개월 동안 where 절을 추가하여 지난 12 개월을 기준으로 결과를 얻을 수 있습니다. – user32876

-1

이 MySQL을에는 half_year 기능이 없지만, 당신이 분기를 계산할 수 있습니다
층 (분기 (date_column)/3) 이 하나가 3,4 분기, 2 분기 1 0 반환 .

그래서 반 년까지 그룹 :

GROUP BY year(date_column) + 0.1 * floor(quarter(date_column)/3) 
+0

Welcome to Stack Overflow! 제한된 도움이 될 수있는이 코드 조각을 가져 주셔서 감사합니다. 적절한 설명을 통해 (* meta.stackexchange.com/q/114762) 왜 * 이것이 문제의 좋은 해결책인지를 보여줌으로써 장기적인 가치를 향상시킬 수있을 것이며, 미래의 독자들에게 더 유용 할 것입니다. 다른 유사한 질문. 귀하의 가정을 포함하여 몇 가지 설명을 추가하려면 답을 편집하십시오. –

+0

이 질문에 대한 답변을 제공하지 않습니다. 충분한 [평판] (https://stackoverflow.com/help/whats-reputation)이 있으면 [모든 게시물에 주석 달기] (https://stackoverflow.com/help/privileges/comment) 할 수 있습니다. 대신, [질문자의 설명이 필요없는 답변을 제공하십시오] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do- 대신). - [검토 중] (리뷰/낮은 품질의 게시물/18960196) –

+0

감사합니다. 내 대답을 편집하여 명확히했다. –

관련 문제