- चूंकि कोई प्राथमिक कुंजी परिभाषित नहीं है, मैं मान रहा हूं कि डेटा को क्रमिक क्रम में
creation_date
पर दर्ज किया गया है औरladder_level
. याद रखें वह डेटा MySQL में अनियंत्रित तरीके से संग्रहीत किया जाता है। - सबसे पहले, हमें डेटा को आवश्यक क्रम में प्राप्त करने के लिए एक उप-चयन क्वेरी का उपयोग करना होगा (जैसा कि पिछले चरण में हाइलाइट किया गया था)। यह उल्लेखनीय है कि
Order By
Select
. के बाद निष्पादित किया जाता है खंड; इसलिए हमें पहले डेटा को क्रमबद्ध करना होगा, और फिर परिणाम-सेट का उपयोग व्युत्पन्न तालिका । - अब, हम User- की मदद लेंगे- परिभाषित चर
(सत्र-स्तर लगातार और सुलभ)। एक अन्य व्युत्पन्न तालिका में
user_init_vars
, हम उन्हें इनिशियलाइज़ करते हैं। Select
में खंड, हम पिछली पंक्ति मान के विरुद्ध वर्तमान पंक्ति के मान की तुलना करते हैं। तुलना के बाद, हम चर मान को वर्तमान पंक्ति के मान पर सेट करते हैं। आप इसे लूपिंग तकनीक के रूप में सोच सकते हैं, जिसका उपयोग हम अन्य प्रोग्रामिंग भाषाओं जैसे PHP, C++, Java आदि में करते हैं।Case .. When
भावों का उपयोग तुलना करने औरladder_change
. को निर्धारित करने के लिए किया जाता है मूल्य।
क्वेरी #1
SELECT
dt.ID,
CASE WHEN DATE(@rd) <> DATE(dt.record_date) AND
dt.ladder_level > @ll
THEN 1
ELSE 0
END AS ladder_change,
@rd := dt.record_date AS record_date,
@ll := dt.ladder_level AS ladder_level
FROM (SELECT ID, record_date, ladder_level
FROM conv_example
ORDER BY ID, record_date, ladder_level) AS dt
CROSS JOIN (SELECT @rd := '',
@ll := '') AS user_init_vars;
| ID | ladder_change | record_date | ladder_level |
| ----- | ------------- | ------------------- | ------------ |
| 324 | 0 | 2016-09-15 00:00:00 | a |
| 324 | 0 | 2016-09-15 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | e |
| 1234 | 0 | 2013-04-03 00:00:00 | |
| 1234 | 0 | 2014-07-03 00:00:00 | a |
| 1234 | 1 | 2015-04-01 00:00:00 | b |
| 1234 | 1 | 2016-09-15 00:00:00 | d |
| 1234 | 0 | 2017-02-04 00:00:00 | b |
| 1234 | 0 | 2017-04-03 00:00:00 | b |
| 1234 | 1 | 2017-04-07 00:00:00 | c1 |
| 1234 | 1 | 2018-09-08 00:00:00 | e |
| 31431 | 0 | 2013-04-03 00:00:00 | |
| 31431 | 0 | 2014-07-03 00:00:00 | a |
| 31431 | 1 | 2017-04-07 00:00:00 | c1 |
| 31431 | 1 | 2018-09-08 00:00:00 | e |