sql >> Databáze >  >> RDS >> Mysql

smazat min. hodnoty ze záznamů po porovnání dvou hodnot z tabulky v sql

Najděte řádky, které chcete tímto dotazem odstranit:

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

Podmínky jsou:

  • value = 0
  • Existuje další řádek se stejným Utc a stejné date ale area_in a area_out jsou přepnuty.
  • value na druhém řádku není 0 nebo area_in je menší.

Dotaz vrátí následující řádky:

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

Nyní jej použijte v dílčím dotazu příkazu delete:

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 znamená, že hodnoty všech sloupců se musí rovnat. Pokud byste měli primární (nebo jakýkoli jedinečný) klíč, museli byste v poddotazu vybrat pouze sloupce primárního (jedinečného) klíče namísto * .

Nyní v tabulce zbývají pouze následující řádky:

|               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. PostgreSQL najde společnou kombinaci párů ve stejném sloupci

  2. Přepis mysql select pro snížení času a zápisu tmp na disk

  3. Řazení výsledků Oracle pomocí smíšeného sloupce varchar, ale číselné klauzule where

  4. MySQL implementace tabulek do databáze