पिछली पंक्ति मान के आधार पर चयन - mysql, sql
मुझे उन सभी संस्थाओं को चुनने की ज़रूरत है जिन्हें प्रोप 4 से 5 में बदल दिए गए थे।
Example:
T1 (It is action log table)
entity dt prop
4 2017-03-01 0
4 2017-03-02 1
4 2017-03-03 4
4 2017-03-04 5
4 2017-03-05 1
4 2017-03-06 1
4 2017-03-07 1
अब मैं इसे स्क्रिप्ट के साथ करता हूं। सबसे पहले मैं इकाइयों (और उनके डीटी) का चयन करता हूं जिनमें प्रोप = 5 है, फिर प्रत्येक इकाई के लिए पिछले रिकॉर्ड (डीटी पर आधारित) का चयन करें, और यदि प्रोप 4 है तो इकाई को रिपोर्ट करने के लिए शामिल किया गया है।
क्या एक एसक्यूएल क्वेरी में करना संभव है?
उत्तर:
जवाब के लिए 0 № 1एक विधि एक सहसंबंधित सबक्वायरी का उपयोग करती है:
select entity
from (select t.*,
(select t2.prop
from t t2
where t2.entity = t.entity and t2.dt < t.dt
order by t2.dt desc
limit 1
) as prev_prop
from t
where prop = 5
) t
where prev_prop = 4;
यदि आप चाहें, तो आप MySQL के एक्सटेंशन का उपयोग कर सकते हैं having
बाहरी क्वेरी को खत्म करने के लिए:
select t.*,
(select t2.prop
from t t2
where t2.entity = t.entity and t2.dt < t.dt
order by t2.dt desc
limit 1
) as prev_prop
from t
where prop = 5
having prev_prop = 4;
नोट: इसे लागू करने के लिए और अधिक प्रभावी तरीके हो सकते हैं। उदाहरण के लिए, यदि प्रत्येक इकाई में अधिकतम 4 और एक 5 है और बीच में कोई अन्य प्रोप अपेक्षित नहीं है, तो आप यह कर सकते हैं:
select entity
from t
group by entity
having max(case when prop = 4 then dt end) < max(case when prop = 4 then dt end);
जवाब के लिए 0 № 2
एक स्व-जुड़ें का प्रयोग करें:
SELECT a.*
FROM T1 AS a
JOIN T1 AS b ON a.entity = b.entity AND a.dt = DATE_ADD(b.dt, INTERVAL 1 DAY)
WHERE a.prop = 5 AND b.prop = 4
संबंधित सवाल
सबसे लोकप्रिय
सबसे लोकप्रिय सी
सबसे लोकप्रिय जावा
सबसे लोकप्रिय PHP