इस क्वेरी के साथ वे पंक्तियाँ खोजें जिन्हें आप हटाना चाहते हैं:
select t0.*
from tbl_entso_cdbf t0
join tbl_entso_cdbf t1
on t1.Utc = t0.Utc
and t1.date = t0.date
and t1.area_in = t0.area_out
and t1.area_out = t0.area_in
where t0.value = 0
and (t1.value <> 0 or t1.area_in < t0.area_in);
शर्तें हैं:
value = 0
- एक ही
Utc
के साथ एक और पंक्ति है और वहीdate
लेकिनarea_in
औरarea_out
स्विच कर रहे हैं। value
दूसरी पंक्ति का0
नहीं है याarea_in
छोटा है।
क्वेरी निम्नलिखित पंक्तियों को वापस कर देगी:
| Utc | date | area_in | area_out | value |
|-------------------|---------------------|---------|----------|-------|
| 2015-12-05T03:00Z | 2015-12-05 03:00:00 | 40 | 275 | 0 |
| 2015-12-06T03:00Z | 2015-12-06 03:00:00 | 175 | 100 | 0 |
| 2015-11-04T03:00Z | 2015-11-04 03:00:00 | 310 | 280 | 0 |
| 2016-09-19T00:00Z | 2016-09-19 00:00:00 | 292 | 187 | 0 |
अब इसे डिलीट स्टेटमेंट की सबक्वेरी में इस्तेमाल करें:
delete t1
from tbl_entso_cdbf t1
natural join (
select t0.*
from tbl_entso_cdbf t0
join tbl_entso_cdbf t1
on t1.Utc = t0.Utc
and t1.date = t0.date
and t1.area_in = t0.area_out
and t1.area_out = t0.area_in
where t0.value = 0
and (t1.value <> 0 or t1.area_in < t0.area_in)
) t0;
NATURAL JOIN
इसका मतलब है कि सभी कॉलम मान बराबर होने चाहिए। यदि आपके पास प्राथमिक (या कोई अद्वितीय) कुंजी है, तो आपको *
के बजाय सबक्वेरी में केवल प्राथमिक (अद्वितीय) कुंजी कॉलम का चयन करना होगा ।
अब तालिका में केवल निम्नलिखित पंक्तियाँ बची हैं:
| Utc | date | area_in | area_out | value |
|-------------------|---------------------|---------|----------|-------|
| 2015-12-05T03:00Z | 2015-12-05 03:00:00 | 275 | 40 | 320 |
| 2015-12-06T03:00Z | 2015-12-06 03:00:00 | 100 | 175 | 550 |
| 2015-11-04T03:00Z | 2015-11-04 03:00:00 | 280 | 310 | 0 |
| 2016-09-19T00:00Z | 2016-09-19 00:00:00 | 187 | 292 | 45 |