Mysql
 sql >> Baza danych >  >> RDS >> Mysql

usuń min. wartości z rekordów po porównaniu dwóch wartości z tabeli w sql

Znajdź wiersze, które chcesz usunąć za pomocą tego zapytania:

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

Warunki są następujące:

  • value = 0
  • Istnieje inny wiersz z tym samym Utc i ta sama date ale area_in i area_out są przełączane.
  • value drugiego wiersza nie jest 0 lub area_in jest mniejszy.

Zapytanie zwróci następujące wiersze:

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

Teraz użyj go w podzapytaniu instrukcji 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 oznacza, że ​​wszystkie wartości kolumn muszą być równe. Jeśli masz klucz podstawowy (lub dowolny unikalny), musisz wybrać tylko kolumny klucza głównego (unikalnego) w podzapytaniu zamiast * .

Teraz w tabeli pozostały tylko następujące wiersze:

|               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. Wybierz elementy z różnych źródeł i uporządkuj według daty

  2. Transakcje Atomic MySQL w Anorm

  3. Jaka jest najłatwiejsza do wdrożenia aplikacja do wyszukiwania witryn, która obsługuje wyszukiwanie rozmyte?

  4. Django- Jak mapować wiadomości wysyłane między użytkownikami

  5. Railsy 3.2.6 i tworzenie widoków baz danych poprzez migracje