按周分组SQL结果并指定"周末结束"日

Ian*_*ber 3 mysql sql datetime

我正在尝试选择按周工作的数据,我已经开始工作了,但我需要能够指定一个不同的日期作为一周的最后一天.我觉得有些事情需要接近INTERVAL (6-weekday('datetime'))但不确定.这种SQL高于我的工资等级($ 0):P

SELECT 
    sum(`value`) AS `sum`, 
    DATE(adddate(`datetime`, INTERVAL (6-weekday(`datetime`)) DAY)) AS `dt` 
FROM `values` 
WHERE id = '123' AND DATETIME BETWEEN '2010-04-22' AND '2010-10-22' 
GROUP BY `dt` 
ORDER BY `datetime`
Run Code Online (Sandbox Code Playgroud)

谢谢!

Pay*_*oad 6

select
    sum(value) as sum,
    CASE WHEN (weekday(datetime)<=3) THEN date(datetime + INTERVAL (3-weekday(datetime)) DAY)
        ELSE date(datetime + INTERVAL (3+7-weekday(datetime)) DAY)
    END as dt
FROM values
WHERE id = '123' and DATETIME between '2010-04-22' AND '2010-10-22'
GROUP BY dt
ORDER BY datetime
Run Code Online (Sandbox Code Playgroud)

这确实看起来很邪恶但是,这个查询将为您提供一个value按星期四(工作日()返回3)结束的一周的总和.

如果你想改变一周结束的那天,你只需要在案例陈述中更换3,即如果你想要星期二,你会说它


CASE WHEN (weekday(datetime)<=1) THEN date(datetime + INTERVAL (1-weekday(datetime)) DAY)
        ELSE date(datetime + INTERVAL (1+7-weekday(datetime)) DAY)

我希望这有帮助.