2012-08-10 4 views
2

지난 주 같은 주에 대해 이번 주에 총 매출 합계를 얻는 방법은 무엇입니까?MySQL - 지난 주 같은 주에 대해 이번 주 총계를 비교하십시오.

다음과 같이 날짜를 저장하는 방법에 관한 두 가지 가능한 시나리오가 있습니다

시나리오 1

**Sales** 

Date   Sales  
----------------------- 
2012-08-10 11040.00 
2012-08-09 11500.00 
2012-08-08 14060.00 
2012-08-07 93000.00 
2012-08-06 11200.00 
... 
2011-08-10 11040.00 
2011-08-09 11500.00 
2011-08-08 14060.00 
2011-08-07 93000.00 
2011-08-06 11200.00 

시나리오 2

**Sales** 

year   month  day   Sales 
---------------------------------------------  
2012   08   10   11040.00 
2012   08   09   11500.00 
2012   08   08   14060.00 
2012   08   07   23000.00 
2012   08   06   11200.00 
... 
2011   08   10   13040.00 
2011   08   09   11500.00 
2011   08   08   12060.00 
2011   08   07   33000.00 
2011   08   06   11250.00 
+1

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week +'GROUP BY' +' SUM' – zerkms

+0

@zerkms이 답변을 만들 수 있습니다 –

+0

@Dean Grell : 전체 쿼리를 작성하는 데 지겨워하고 작은 팁으로 코멘트로 남겨 두는 것이 더 좋습니다 :-) – zerkms

답변

3

첫 번째 시나리오의 경우는 WEEKOFYEAR()의 동일한 테이블에 조인하고 하나는 l에 추가됩니다. AST 올해의 YEAR() :

SELECT 
    YEARWEEK(thisyear.Date) AS `YearWeek` 
    SUM(lastyear.Sales) AS LastYearSales 
    SUM(thisyear.Sales) AS ThisYearSales 
FROM 
    Sales thisyear 
    LEFT JOIN Sales lastyear ON 
     WEEKOFYEAR(thisyear.Date) = WEEKOFYEAR(lastyear.Date) 
     AND YEAR(thisyear.Date) = (YEAR(lastyear.Date) + 1) 
GROUP BY `YearWeek` 

두 번째 시나리오는 3 개 별도의 값에서 날짜를 구축해야합니다. 나는이 작동 생각 :

SELECT 
    YEARWEEK(CONCAT_WS('-', thisyear.year, thisyear.month, thisyear.day)) AS `YearWeek`, 
    SUM(lastyear.Sales) AS LastYearSales, 
    SUM(thisyear.Sales) AS ThisYearSales 
FROM 
    Sales thisyear 
    LEFT JOIN Sales lastyear ON 
    WEEKOFYEAR(CONCAT_WS('-', thisyear.year, thisyear.month, thisyear.day)) = WEEKOFYEAR(CONCAT_WS('-', lastyear.year + 1, lastyear.month, lastyear.day)) 
GROUP BY `YearWeek` 
+0

이것은 53 번째 주에 대해 NULL을 반환하지만 요구 사항 내에있을 수 있습니다. 우리 고객 중 한 명은 주 번호를 포기할 때까지 작년 주 계산 방법에 대한 문제를 지속적으로 제기 해 왔으며이 간단한 수식 인 'last_year.week_start = this_year.week_start - 364 days'를 도입했습니다. –

관련 문제