Mysql按周列求和并除以上周的求和值

标签 mysql

在我的数据库中,数据是按天存储的。我想按周对值进行求和,然后将该值除以上周的总和值。可以通过SQL实现吗? 示例:

   Table  Structure
   ItemCode   Amount         DatebyDay
   01         500           20170815
   01         500           20170816
   ...
   01         500           20170819
   01         1000           20170821
   01         1000           20170822
   ...
   01         1000           20170825
    ...
   02         2000           20170815
   02         2000           20170816
   ...
   02         2000           20170819
   02         3000           20170821
   02         3000           20170822
   ...
   02         3000           20170825
   ....

我的预期结果是:

 01  2                //(1000*5)/(500*5)
 02  1.5              //(3000*5)/(2000*5)

所以任何人都知道如何做到这一点。谢谢。

最佳答案

SELECT ITEMCODE,F_VAL FROM 
(
    SELECT @PREV_VAL,CASE WHEN ITEMCODE=@PREV_ITEMCODE THEN AMT/@PREV_VAL END F_VAL, @PREV_VAL:=AMT,ITEMCODE,@PREV_ITEMCODE :=ITEMCODE FROM
    (
        SELECT SUM(AMOUNT) AMT,DATEBYDAY,ITEMCODE FROM 
        (
            SELECT *,WEEK(DATEBYDAY) WEEK 
            FROM STRUCTURE,(SELECT @PREV_VAL:=0,@PREV_ITEMCODE :=0)Z1 ORDER BY ITEMCODE, WEEK(DATEBYDAY)
        )Z GROUP BY ITEMCODE,WEEK
    )Y 
)X WHERE F_VAL IS NOT NULL;

您可以使用SQLFiddle Demo进行检查使用下面的查询

您可以尝试上面的代码。

这里我使用了两个变量来计算您的业务逻辑。

一定会对你有帮助。

关于Mysql按周列求和并除以上周的求和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45958301/

相关文章:

MySql如何通过 `END AS`或另一个 `CASE`检查另一个条件来获取 `IF`语句的 `CASE`

java - hibernate "ManyToOne ... references an unknown entity"异常

php - 来自 MySQL 的外国语言在我的 PHP 文件中显示为 ?

php - 我应该从 Zend_Db 移植到哪个 native mysql 类? (无 PDO 或 Mysqli)

php - 使用 Propel ORM 保存和检索 blob

php - 在 CakePHP 中查询更新数据

mysql - 使用 INNER JOIN 查询仅选择唯一行

mysql - MySQL 会自动最小化重复的 VARCHAR 存储吗?

php - 检查数据库连接,否则显示消息

mysql - ifnull 不适用于 mysql