2013-02-12 5 views
4

금요일 시작일을 기준으로 주별 보고서를 만드는 데 도움이되는 다음 코드가 있습니다. 지시 사항은 ". $ startWeekDay"를 대체합니다. 4. '$ startDay.' '를'2013-01-30 '로 입력하면 오류가 발생합니다.주간 MySQL 시작 날짜 변경

또한 원하는대로 일주일에 한 번씩 보고서를받습니다.

SELECT SUM(cost) AS total, 
    CONCAT(IF(date - INTERVAL 6 day < '".$startDay."', 
      '".$startDay."', 
      IF(WEEKDAY(date - INTERVAL 6 DAY) = ".$startWeekDay.", 
       date - INTERVAL 6 DAY, 
       date - INTERVAL ((WEEKDAY(date) - ".$startWeekDay.")) DAY)), 
     ' - ', date) AS week, 
     IF((WEEKDAY(date) - ".$startWeekDay.") >= 0, 
      TO_DAYS(date) - (WEEKDAY(date) - ".$startWeekDay."), 
      TO_DAYS(date) - (7 - (".$startWeekDay." - WEEKDAY(date))))  AS sortDay 
FROM daily_expense 
WHERE date BETWEEN '".$startDay."' AND '".$endDay."' 
GROUP BY sortDay; 

다음 코드는 내가 일주일에 의해

SELECT count(DISTINCT (
UserID) 
) AS total, CONCAT(IF(date(LastModified) - INTERVAL 6 day < date(LastModified), 
      date(LastModified), 
      IF(WEEKDAY(date(LastModified) - INTERVAL 6 DAY) = 4, 
       date(LastModified) - INTERVAL 6 DAY, 
       date(LastModified) - INTERVAL    ((WEEKDAY(date(LastModified)) - 4)) DAY)), 
     ' - ', date(LastModified)) AS week 

FROM `Purchase` 
WHERE `OfferingID` =87 
AND `Status` 
IN (1, 4) 

그룹을 사용하고 무엇

내가 얻을 출력은

total week 
3 2013-01-30 - 2013-01-30 
1 2013-01-31 - 2013-01-31 

답변

1

이다 나는 당신이 원하는 방법을 정확하게 확실하지 않다 주를 표시하려면 위의 sql이 날짜 범위를 표시하려고합니다. 이것이 요구 사항이 아니라면 쿼리가 매우 간단 할 수 있습니다. 금요일을 2 일간 주간의 자연스런 별에서 2 일 이후로 2 일까지 시간을 상쇄하고 week 함수를 사용하여 주 번호를 가져올 수 있습니다.

쿼리는 다음과 같이 보일 것이다 :

select count(distinct (UserID)) as total 
, year(LastModified + interval 2 day) as year 
, week(LastModified + interval 2 day) as week_number 
FROM `Purchase` 
WHERE `OfferingID` =87 
AND `Status` 
IN (1, 4) 
group by year, week_number;