sql >> Databasteknik >  >> RDS >> Mysql

radera min. värden från poster efter att ha jämfört två värden från tabellen i sql

Hitta de rader du vill ta bort med den här frågan:

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);

Villkoren är:

  • value = 0
  • Det finns en annan rad med samma Utc och samma date men area_in och area_out är växlade.
  • value på den andra raden är inte 0 eller area_in är mindre.

Frågan returnerar följande rader:

|               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 |

Använd den nu i en underfråga till delete-satsen:

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 betyder att alla kolumnvärden måste vara lika. Om du hade en primär (eller någon unik) nyckel, skulle du bara behöva välja de primära (unika) nyckelkolumnerna i underfrågan istället för * .

Nu finns bara följande rader kvar i tabellen:

|               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. php:Lagra bild i Mysql blob, bra eller dåligt?

  2. Vad är storleken på kolumnen av int(11) i mysql i byte?

  3. Ändra tabell med kommandot Sqitch Rework

  4. Hur kan jag anropa en mysql-funktion (som mysql_insert_id) från Perl om jag använder DBI/DBD?