在MySQL中更改一周的开始日期

时间:2013-02-12 21:59:34

标签: mysql week-number

我发现以下代码可帮助您根据星期五的开始日期创建每周报告。说明说要替换“。$ startWeekDay”。当我把'“。$ startDay。”'作为'2013-01-30',我得到错误。

我也按照自己的意愿按天而不是按周报告。

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 个答案:

答案 0 :(得分: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;