पिछली पंक्ति मान के आधार पर चयन - 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

संबंधित सवाल
सबसे लोकप्रिय