SQL:获取每周总计的特定日期总计

时间:2019-04-09 08:17:34

标签: mysql sql

这是我第一次在此网站上提问,因此,如果这个问题提出的要求很差,我将不胜感激。

所以问题出在下面。 在我的表格中,我们将其称为“总计”,我有销售总额。每行都有该周的完整总计,以及该周每一天的总计。因此,这五个总数总计为星期总数。 每行还包含一年中的一周(格式:yyyyww)。

所以它看起来像这样

%

现在我的问题是,如何从一个查询中说出201921周的星期三到201924周的星期二的所有总计?如果可以在一个查询中得到它,那将是很好,但是如果绝对不可能,那么两个或三个也应该很好。 如果我的数学正确,则预期输出为180。

1 个答案:

答案 0 :(得分:0)

尽管可能更有效/更干净的方法,但仍然可以使用CASE WHEN语句来实现。您可以尝试这样的事情:

SELECT
    sum(
        CASE WHEN date < YEARWEEK($startDate, 0) OR date > YEARWEEK($endDate, 0) THEN 0
        WHEN date = YEARWEEK($startDate, 0) THEN
            CASE WHEN DAYOFWEEK($startDate) = 1 THEN totalsu + totalmo + totaltu + totalwe + totalth + totalfr + totalsa
            WHEN DAYOFWEEK($startDate) = 2 THEN totalmo + totaltu + totalwe + totalth + totalfr + totalsa
            WHEN DAYOFWEEK($startDate) = 3 THEN totaltu + totalwe + totalth + totalfr + totalsa
            WHEN DAYOFWEEK($startDate) = 4 THEN totalwe + totalth + totalfr + totalsa
            WHEN DAYOFWEEK($startDate) = 5 THEN totalth + totalfr + totalsa
            WHEN DAYOFWEEK($startDate) = 6 THEN totalfr + totalsa
            WHEN DAYOFWEEK($startDate) = 7 THEN totalsa
            END
        WHEN date = YEARWEEK($endDate, 0) THEN
            CASE WHEN DAYOFWEEK($endDate) = 7 THEN totalsu + totalmo + totaltu + totalwe + totalth + totalfr + totalsa
            WHEN DAYOFWEEK($endDate) = 6 THEN totalsu + totalmo + totaltu + totalwe + totalth + totalfr
            WHEN DAYOFWEEK($endDate) = 5 THEN totalsu + totalmo + totaltu + totalwe + totalth
            WHEN DAYOFWEEK($endDate) = 4 THEN totalsu + totalmo + totaltu + totalwe
            WHEN DAYOFWEEK($endDate) = 3 THEN totalsu + totalmo + totaltu
            WHEN DAYOFWEEK($endDate) = 2 THEN totalsu + totalmo
            WHEN DAYOFWEEK($endDate) = 1 THEN totalsu
            END
        WHEN date > YEARWEEK($startDate, 0) OR date < YEARWEEK($endDate, 0) THEN totalsu + totalmo + totaltu + totalwe + totalth + totalfr + totalsa
        END
    )
FROM
    table;

我不是100%知道语法,但是它应该提供预期的结果或为您提供获取它们的方法。我使用了YEARWEEKDAYOFWEEK函数。