Актуализация 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` )
Забележка 1:Мисля, че с @Grijesh изчистихме синтаксиса на заявките едновременно. Окуражаващо е, че се оказахме с много сходни версии, след като и двамата правихме почистване. Моята версия се различава в използването на IFNULL()
за когато няма предходни данни. Аз също се оказах с DATE_SUB
, и се погрижих да намаля различните дати до обикновени дати без компонент за време чрез DATE()
Забележка 2:Първоначално не бях разбрал напълно вашите изходни таблици, така че реших, че трябва да внедря текущ брой в заявката. Но при по-добра проверка става ясно, че изходните ви данни вече имат текущ брой, така че извадих тези неща обратно.