2012-11-26 4 views
1

내가 실행중인 문제는이 쿼리를 실행할 때 현재 날짜 (현재 날짜에서 7 일)에서 1 주 간격으로 시작하는 것입니다. 나는 이전 10 주 (일 - 월)를 모두하고 싶다. 따라서 현재 날짜가 월요일, 화요일 또는 수요일 인 경우 가장 최근 일요일에 시작한 다음 이전 10 주를 다시보고 싶습니다.MySql SELECT WHERE 날짜가 지난 10 주보다 큰 경우 (일요일부터 시작)

SELECT 
    SUM(MT.QUANTITY) as qty, 
    WEEKDAY(MT.TRANS_DATE) AS WEEKDAY, 
    WEEK(MT.TRANS_DATE) AS WEEK, 
    YEAR(MT.TRANS_DATE) AS YEAR 
FROM 
    mytable MT 
WHERE 
     MT.TRANS_DATE > DATE_SUB(CURDATE(), INTERVAL 10 WEEK) 
GROUP BY WEEK 

답변

4

이 같은 DATE_SUB(STR_TO_DATE(CONCAT(YEAR(CURDATE()),WEEK(CURDATE()),' Sunday'), '%X%V %W'),INTERVAL 10 WEEK)로 시도해보십시오 :

SELECT 
    SUM(MT.QUANTITY) as qty, 
    WEEKDAY(MT.TRANS_DATE) AS WEEKDAY, 
    WEEK(MT.TRANS_DATE) AS WEEK, 
    YEAR(MT.TRANS_DATE) AS YEAR 
FROM 
    mytable MT 
WHERE 
     MT.TRANS_DATE > DATE_SUB(STR_TO_DATE(CONCAT(YEAR(CURDATE()),WEEK(CURDATE()),' Sunday'), '%X%V %W'),INTERVAL 10 WEEK) 
GROUP BY WEEK 

은 또한 사용할 수있는 다른 방법의 단락 기호 제안 본인은 DATE_SUB에서 WEEKDAY 또는 DAYOFWEEK를 사용해야하지만 아무 소용로 시도 생각 :

좀 더 읽을 수
SUBDATE(CURDATE(), DAYOFWEEK(CURDATE()) - 1) 

...

+1

+1 "이번 주 일요일"을 SUBDATE (CURDATE (CURDATE(), DAYOFWEEK (CURDATE()) - 1) 문자열 조작보다 읽기가 더 쉬운 FWIW로 계산합니다. 그러나 둘 다 상수이므로 실행에 차이를 두지 않아야합니다. – pilcrow

+0

@pilcrow 당신의 방법을 포함하여 답변을 업데이트했습니다.) : ... – DarkAjax