2013-02-12 53 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) 

GROUP BY周

我得到的輸出是

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

回答

1

我不知道你到底怎麼想要顯示你的星期,上面的sql試圖顯示日期範圍。如果這不是一個要求,你的查詢可以是非常簡單的,你可以抵消兩天的時間(因爲星期五是一週中的自然星級兩天了),並使用一週函數來獲取週數。

查詢應該是這樣的:

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;