Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

xóa tối thiểu. giá trị từ các bản ghi sau khi so sánh hai giá trị từ bảng trong sql

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ột date nhưng area_inarea_out được chuyển đổi.
  • Giá trị value của hàng khác không phải là 0 hoặc area_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 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nhóm theo ngày, xác nhận, đang chờ xử lý

  2. gặp lỗi mysql khi tạo trình kích hoạt

  3. MySQL Connect / C ++ 64 bit lỗi xây dựng

  4. cách lấy kích thước của một bản ghi trong mysql

  5. sử dụng mysql_free_result ($ result) có phải là một phương pháp hay không?