mysql根据前一个日期计算

标签 mysql sql calculated-columns

我有一个奇怪的问题,计算是基于今天的值减去前一天的值
这是查询。样本数据及查询结果 here

SELECT pd.id,pd.price_date,pd.name_id,pd.class_id,pd.currency_id,pd.price,
         pd.price - (SELECT price
                    FROM price_data as x
                    WHERE x.price_date < pd.price_date
                    AND x.name_id      = pd.name_id
                    AND x.class_id     = pd.class_id
                    AND x.currency_id  = pd.currency_id
      HAVING MAX(x.price_date)) as `change`
      FROM price_data as pd
      WHERE pd.name_id ='BILL'

      ORDER bY pd.name_id,pd.class_id,pd.currency_id,pd.price_date    

如果您查看结果集,您会发现计算一直有效,直到它在 第 6 行 处首次失败。好像开始把之前的改动加到现在的改动上。

日期判断有问题吗?

最佳答案

您想要的查询是:

SELECT pd.id,pd.price_date,pd.name_id,pd.class_id,pd.currency_id,pd.price,
         pd.price - (SELECT price
                     FROM price_data as x
                     WHERE x.price_date < pd.price_date
                     AND x.name_id      = pd.name_id
                     AND x.class_id     = pd.class_id
                     AND x.currency_id  = pd.currency_id
                     order by x.price_date desc
                     limit 1
                    ) as `change`
FROM price_data as pd
WHERE pd.name_id ='BILL'
ORDER bY pd.name_id,pd.class_id,pd.currency_id,pd.price_date;

您的原始查询有什么问题?嗯,having 子句是一个非操作,因为它只是检查 price_date 的最大值不为 0。要得到你想要的,你需要对数据进行排序并取一个值你感兴趣。

关于mysql根据前一个日期计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16694882/

相关文章:

php - 选择表列名称然后显示它们

sql - 如何引用或将具有varchar主键的表与具有INT主键的表结合在一起(SQL Server)

postgresql - 可以使用(聚合)函数来定义列吗?

mysql - 关于 : creating calculated tables based on scraped data 我最好的方法是什么

javascript - 手持计算

php - Zend Framework 表插入 MySQL 表达式

mysql - 针对特定的 sql 脚本优化 mysql 查询

基于 2 列的 ORDER BY 的 MySQL rowrank

mysql - 如何在 MySQL 中使用计数函数的结果?

sql - oracle sql 中的迄今为止的字符