अद्यतन 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:मैं मूल रूप से आपकी स्रोत तालिकाओं को पूरी तरह से नहीं समझ पाया था, इसलिए मैंने सोचा कि मुझे क्वेरी में चल रही गणना को लागू करने की आवश्यकता है। लेकिन बेहतर निरीक्षण करने पर, यह स्पष्ट है कि आपके स्रोत डेटा की संख्या पहले से ही चल रही है, इसलिए मैंने वह सामान वापस ले लिया।