我是MySQL新手,我试图找到:
给定日期的最大值与前一天的最大值之间的差异.
我能够通过以下方式获得日期的最大值:
select max(`bundle_count`), `Production_date`
from `table`
group by `Production_date`
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用SQL来计算两个给定日期的最大值之间的差异.
我期待这样的输出
请帮我.
更新1:这是我用来测试的小提琴http://sqlfiddle.com/#!2/818ad/2.
更新2:这是一个小提琴,http://sqlfiddle.com/#!2/3f78d/10,我根据桑迪的评论用于进一步提炼/修复.
更新3:由于某种原因,前一天没有正确处理的情况.我以为是的.但是,我已经更新,以确保工作(有点麻烦 - 但它似乎是正确的.最后小提琴:http://sqlfiddle.com/#!2/3f78d/ 45
我认为@Grijesh在概念上通过输入数据的自联接为您提供了所需的主要内容(因此请确保您投票给他答案!).我已经在语法上清理了他的查询(建立了他的查询!):
SELECT
DATE(t1.`Production_date`) as theDate,
MAX( t1.`bundle_count` ) AS 'max(bundle_count)',
MAX( t1.`bundle_count` ) -
IF(
EXISTS
(
SELECT date(t2.production_date)
FROM input_example t2
WHERE t2.machine_no = 1 AND
date_sub(date(t1.production_date), interval 1 day) = date(t2.production_date)
),
(
SELECT MAX(t3.bundle_count)
FROM input_example t3
WHERE t3.machine_no = 1 AND
date_sub(date(t1.production_date), interval 1 day) = date(t3.production_date)
GROUP BY DATE(t3.production_date)
), 0
)
AS Total_Bundles_Used
FROM `input_example` t1
WHERE t1.machine_no = 1
GROUP BY DATE( t1.`production_date` )
Run Code Online (Sandbox Code Playgroud)
注1:我认为@Grijesh和我同时正在清理查询语法问题.令人鼓舞的是,在我们进行清理之后,我们最终得到了非常相似的版本.IFNULL()
当没有先前的数据时,我的版本在使用时有所不同.我也最终得到了一个DATE_SUB
,并且我确保将各种日期减少到没有时间组件的日期,通过DATE()
注2:我原本还没有完全理解你的源表,所以我认为我需要在查询中实现一个运行计数.但是经过更好的检查,很明显你的源数据已经有了运行数,所以我把这些东西拿回来了.