मेरे पास एक सारणी है जिसमें नाम, घटनाएं और तिथियां हैं। मैंने एक नया क्षेत्र 'evt5_date
' बनाया है जो एक विशिष्ट घटना से संबंधित है (evt5
)।मैं 'से अधिक' और 'समूह द्वारा' का उपयोग करके शामिल कैसे हो सकता हूं?
प्रत्येक नाम में कई घटनाएं हो सकती हैं जिनमें से प्रत्येक का समय evt_date
फ़ील्ड में दर्ज किया जाता है। दो घटनाएं evt1
और evt2
evt5
से संबंधित हैं।
मैं सभी evt1
और evt2
पंक्तियों evt5
पूर्ववर्ती में एक evt5
की पहली आवृत्ति की तारीख सम्मिलित करना चाहते हैं। evt1
या evt2
के बाद evt5
नहीं है तो फ़ील्ड खाली छोड़ दिया गया है।
यह सब प्रत्येक name
के लिए किया जाना चाहिए। कुछ हज़ार अलग-अलग नाम हैं। evt5_date
name evt_date event evt5_date
name-1 2010-06-30 evt1
name-1 2009-10-30 evt5
name-1 2009-09-30 evt2
name-1 2009-06-30 evt5
name-1 2009-03-30 evt5
name-1 2009-02-28 evt2
name-1 2009-01-30 evt1
name-2 2005-05-30 evt2
name-2 2005-03-30 evt5
name-2 2005-01-30 evt1
के मानों मैं इसे देखने के लिए कैसे करना चाहते हैं - - मैं सिर्फ नीचे
वर्तमान तालिका डेटा डेटा में 2 दिखाने गए evt5_date क्षेत्र में मूल्यों
name evt_date event evt5_date
name-1 2010-06-30 evt1
name-1 2009-10-30 evt5
name-1 2009-09-30 evt2 2009-10-30
name-1 2009-06-30 evt5
name-1 2009-03-30 evt5
name-1 2009-02-28 evt2 2009-03-30
name-1 2009-01-30 evt1 2009-03-30
name-2 2005-05-30 evt2
name-2 2005-03-30 evt5
name-2 2005-01-30 evt1 2005-03-31
मैंने नीचे दिए गए कोड के साथ अद्यतन करने का प्रयास किया, लेकिन मुझे नहीं पता था कि evt5 की तारीख के बीच संबंध को निर्दिष्ट करने के लिए evt1 और evt2 के evt_date से अधिक होने के दौरान कैसे निर्दिष्ट करना है जबकि समूह सबसे हालिया evt5 से संबंधित evt_date प्राप्त करने के लिए evt5 द्वारा जी।
मुझे नाम से समूह करने की भी आवश्यकता है क्योंकि ईवेंट प्रत्येक नाम के लिए विशिष्ट हैं।
update mytable as t1
set t1.evt5_date = (select min(t2.evt_date) from mytable as t2
where t2.event = 'evt5' AND
t2.evt_date > t1.evt_date
group by name)
where
t1.event in ('evt1', 'evt2')
किसी भी सुझाव की सराहना की जाएगी। धन्यवाद
अपडेट अंतिम समाधान - कुछ मामूली परिवर्तन name
UPDATE mytable AS t1
INNER JOIN
(
SELECT
a.name, a.evt_date,
MIN(b.evt_date) AS nearest_date
FROM mytable AS a
INNER JOIN mytable AS b ON b.event = 'evt5'
AND b.evt_date > a.evt_date
AND a.name = b.name -- needed this additional condition
GROUP BY a.name, a.evt_date -- added 'a.name' to 'group by'
) AS nearest_dates
ON nearest_dates.evt_date = t1.evt_date AND
nearest_dates.name = t1.name -- added this additional condition
SET t1.evt5_date = nearest_dates.nearest_date
WHERE t1.event IN ('evt1', 'evt2');
जो a2.evt5_date ??? है, मैं समझ गया नहीं है, आप अद्यतन T1 है और a2 सेट ? – jcho360
@ jcho360 - खेद है कि एक टाइपो था, यह 'टी 1' होना चाहिए। अब तय –
क्या आप कुछ संरचना और डेटा sqlfiddle में डाल सकते हैं और इसे साझा कर सकते हैं? – jcho360