यह मेरी MySQL तालिका है।

+-----------+-------------+---------------------+
|   element | status      | hour                |
+-----------+-------------+---------------------+
|        18 | Available   | 2020-01-19 14:23:49 |
|        18 | Unavailable | 2019-09-13 18:19:47 |
|        18 | Available   | 2019-09-13 18:18:49 |
|        18 | Unavailable | 2019-09-09 08:22:45 |
|        19 | Available   | 2019-09-07 19:13:56 |
|        19 | Available   | 2019-09-03 18:13:49 |
+-----------+-------------+---------------------+

आम तौर पर प्रत्येक तत्व status के लिए इस MySQL तालिका में पंक्तियों की समयरेखा अनुपलब्ध/उपलब्ध है।

लेकिन ऐसा हुआ कि एलिमेंट नंबर 19 के लिए status में पंक्तियों की टाइमलाइन उपलब्ध/उपलब्ध है:

+----------+-------------+---------------------+
| element  | status      | hour                |
+----------+-------------+---------------------+
|       19 | Available   | 2019-09-07 19:13:56 |
|       19 | Available   | 2019-09-03 18:13:49 |
+----------+-------------+---------------------+

क्या इसका मतलब विसंगति है।

मुझे इन मामलों को रोकना होगा, यानी प्रत्येक तत्व के लिए सभी पंक्तियां status जब समयरेखा उपलब्ध/उपलब्ध हो।

इसका समाधान कैसे करें?

कृपया क्या आप मेरे सहायता कर सकते है ?

#संपादित करें 01

+-----------+-------------+---------------------+---------+
|   element | status      | hour                |   ID    |
+-----------+-------------+---------------------+---------+
|        18 | Available   | 2020-01-19 14:23:49 |   6     |
|        18 | Unavailable | 2019-09-13 18:19:47 |   5     |
|        18 | Available   | 2019-09-13 18:18:49 |   4     |
|        18 | Unavailable | 2019-09-09 08:22:45 |   3     |
|        19 | Available   | 2019-09-07 19:13:56 |   2     |
|        19 | Available   | 2019-09-03 18:13:49 |   1     |
+-----------+-------------+---------------------+---------+
0
user3368883 21 जिंदा 2020, 11:23

1 उत्तर

सबसे बढ़िया उत्तर

अपने मूल रूप से प्रकाशित नमूना डेटा के आधार पर आप अगली और पिछली स्थिति पर एक नज़र डालने के लिए एक उप क्वेरी का उपयोग कर सकते हैं, फिर परीक्षण करें

select s.element,s.hour,s.`status`
from
(
select t.*,
(select concat(t1.status,',',t1.hour) from t t1 
where t1.element = t.element and t1.hour < t.hour
order by t1.element,t1.hour desc limit 1) prev,
(select concat(t1.status,',',t1.hour) from t t1 
where t1.element = t.element and t1.hour > t.hour
order by t1.element,t1.hour limit 1) nxt
from t
) s
where s.status = substring_index(s.nxt,',',1) or
        s.status = substring_index(s.prev,',',1)
;
0
P.Salmon 21 जिंदा 2020, 12:35