Tìm các hàng bạn muốn xóa bằng truy vấn này:
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);
Các điều kiện là:
-
value = 0
- Có một hàng khác có cùng
Utc
và cùng mộtdate
nhưngarea_in
vàarea_out
được chuyển đổi. - Giá trị
value
của hàng khác không phải là0
hoặcarea_in
nhỏ hơn.
Truy vấn sẽ trả về các hàng sau:
| 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 |
Bây giờ, hãy sử dụng nó trong một truy vấn con của câu lệnh xóa:
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
có nghĩa là tất cả các giá trị cột phải bằng nhau. Nếu bạn có khóa chính (hoặc bất kỳ khóa duy nhất nào), bạn chỉ cần chọn các cột khóa chính (duy nhất) trong truy vấn con thay vì *
.
Bây giờ chỉ còn lại các hàng sau trong bảng:
| 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 |