Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 仅包含特定日期的按日期分组_Mysql_Date - Fatal编程技术网

Mysql 仅包含特定日期的按日期分组

Mysql 仅包含特定日期的按日期分组,mysql,date,Mysql,Date,我试过看一些类似的例子,比如按日期范围分组和工作日等,但我无法在我的查询中修复它 根据我的示例数据截图,我只需要返回 sum(salesamount)/sum(salescount) for week 1 及 每周包含5天(本例中为周三-周日) 我的尝试: select salesstartdate, date_add(salesstartdate, interval 5 day) as gdate, salesamount, salescount, sum(salesamount)

我试过看一些类似的例子,比如按日期范围分组和工作日等,但我无法在我的查询中修复它

根据我的示例数据截图,我只需要返回

sum(salesamount)/sum(salescount) for week 1 

每周包含5天(本例中为
周三-周日

我的尝试:

select salesstartdate, date_add(salesstartdate, interval 5 day) as gdate,
    salesamount, salescount, sum(salesamount)/sum(salescount) as ATV
from testing
group by gdate;
Week 1  15.34173913
Week 2  15.80365088
我想要的输出是:

select salesstartdate, date_add(salesstartdate, interval 5 day) as gdate,
    salesamount, salescount, sum(salesamount)/sum(salescount) as ATV
from testing
group by gdate;
Week 1  15.34173913
Week 2  15.80365088
第1周获得
的计算结果为
(3507.1+3639.97+5258.77+8417.04+5994.48)/(285+273+344+478+368)

第2周的计算与上述相同,只是日期现在是6月8日至12日


您可以通过子查询来完成。为了首先正确分组结果集,然后对其执行聚合:

SELECT 
    concat('WEEK', ' ', weekno) as `Week #`,
    MIN(salesstartdate) as startDate,
    MAX(salesstartdate) as endDate,
    sum(salesamount)/sum(salescount) as ATV
FROM
    (
        SELECT 
            salesstartdate,         
            salesamount, 
            salescount,
            WEEKOFYEAR(salesstartdate) as weekno    -- get the week number of the current year
        FROM
            weekno
        WHERE
            WEEKDAY(salesstartdate) BETWEEN 2 AND 6 -- get index of week day
    ) as weeks
GROUP BY
    weekno
我在这里使用了两个MySQL函数:

输出:

WEEK 23 | 2016-06-08 | 2016-06-12 | 15.8040
WEEK 24 | 2016-06-16 | 2016-06-19 | 15.9323
也没有子查询:

SELECT 
    concat('WEEK', ' ', WEEKOFYEAR(salesstartdate)) as `Week #`,
    MIN(salesstartdate) as startDate,
    MAX(salesstartdate) as endDate,
    sum(salesamount)/sum(salescount) as ATV
FROM
    weekno
WHERE
    WEEKDAY(salesstartdate) BETWEEN 2 AND 6 -- get index of week day
GROUP BY
    WEEKOFYEAR(salesstartdate)
你可以这样做

select SUBDATE(salesstartdate, WEEKDAY(salesstartdate)) as week_range
    , sum(salesamount)/sum(salescount)
from testing
where salesstartdate between SUBDATE(salesstartdate, WEEKDAY(salesstartdate)) 
    and  date_add(SUBDATE(salesstartdate, WEEKDAY(salesstartdate)), interval 5 day))
Group by week_range

你能分享你的表格数据吗?是的,根据上面的截图。这些是我表中的数据。这就是你所指的吗?哦……它不见了:(对不起,我重新附上了。谢谢wajeeh和Shah。你如何定义要花的5天?假设这个例子总是“星期三”到“星期天”。因此,如果下次我想要不同的5天,我想我可以更新查询并将“星期四”改为“星期一”例如。天哪!!太棒了!谢谢你,它甚至给了我开始和结束的日期。我今天学到了新的东西:)太感谢你了,沙阿!!完美的非常感谢你!我想知道的同时,我再次尝试后,你提示我的问题,如何定义以下查询的5天,但不工作。是不是因为我的逻辑错误了?从测试中选择salesstartdate为“日期范围1”,sum(salesamount)/sum(salescount),其中salesstartdate>='2016-06-08'和salesstartdate='2016-06-15',salesstartdate您的逻辑实际上是硬编码的,虽然它可以工作,但是你把
条件写错了。哦,这是有道理的。我没有想到这一点。的确,如果我有10周的时间把他们结合起来,这是不可行的。感谢you@Strawberry同意,也添加了那个版本。你确定它有效吗?因为在分组时,您将没有列
week\u range