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

SQL Return 1,0 w nowej zmiennej na podstawie przypadku, gdy instrukcja odnosi się do wielu innych zmiennych

  • Ponieważ nie zdefiniowano klucza podstawowego, zakładam, że dane są wprowadzane w kolejności sekwencyjnej w dniu creation_date i ladder_level . Pamiętaj że dane są przechowywane w nieuporządkowany sposób w MySQL.
  • Po pierwsze, musimy użyć zapytania podwyboru, aby uzyskać dane w wymaganej kolejności (jak zaznaczono w poprzednim kroku). Warto zauważyć, że Order By jest wykonywane po Select klauzula; więc musimy najpierw posortować dane, a następnie użyć zestawu wyników jako Tabela pochodna .
  • Teraz skorzystamy z pomocy User- zdefiniowane zmienne (trwałe i dostępne na poziomie sesji). W innej tabeli pochodnej user_init_vars , inicjujemy je.
  • W Select klauzula, porównujemy wartość bieżącego wiersza z wartością poprzedniego wiersza. Po porównaniu ustawiamy wartość zmiennej na wartość bieżącego wiersza. Możesz myśleć o tym jako o technice pętli, której używamy w innych językach programowania, takich jak PHP, C++, Java itp.
  • Case .. When wyrażenia są używane do porównywania i określania ladder_change wartość.

Zapytanie nr 1

SELECT 
  dt.ID, 
  CASE WHEN DATE(@rd) <> DATE(dt.record_date) AND 
            dt.ladder_level > @ll 
       THEN 1 
       ELSE 0 
  END AS ladder_change, 
  @rd := dt.record_date AS record_date, 
  @ll := dt.ladder_level AS ladder_level 
FROM (SELECT ID, record_date, ladder_level 
      FROM conv_example 
      ORDER BY ID, record_date, ladder_level) AS dt 
CROSS JOIN (SELECT @rd := '', 
                   @ll := '') AS user_init_vars;

| ID    | ladder_change | record_date         | ladder_level |
| ----- | ------------- | ------------------- | ------------ |
| 324   | 0             | 2016-09-15 00:00:00 | a            |
| 324   | 0             | 2016-09-15 00:00:00 | b            |
| 324   | 0             | 2017-04-07 00:00:00 | b            |
| 324   | 0             | 2017-04-07 00:00:00 | c1           |
| 324   | 0             | 2018-09-08 00:00:00 | c1           |
| 324   | 0             | 2018-09-08 00:00:00 | e            |
| 1234  | 0             | 2013-04-03 00:00:00 |              |
| 1234  | 0             | 2014-07-03 00:00:00 | a            |
| 1234  | 1             | 2015-04-01 00:00:00 | b            |
| 1234  | 1             | 2016-09-15 00:00:00 | d            |
| 1234  | 0             | 2017-02-04 00:00:00 | b            |
| 1234  | 0             | 2017-04-03 00:00:00 | b            |
| 1234  | 1             | 2017-04-07 00:00:00 | c1           |
| 1234  | 1             | 2018-09-08 00:00:00 | e            |
| 31431 | 0             | 2013-04-03 00:00:00 |              |
| 31431 | 0             | 2014-07-03 00:00:00 | a            |
| 31431 | 1             | 2017-04-07 00:00:00 | c1           |
| 31431 | 1             | 2018-09-08 00:00:00 | e            |

Wyświetl na DB Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabela bazy danych nie istnieje zgodnie z kompilatorem Android Studio

  2. jak ustawić domyślną wartość dla typu tekstu w mysql

  3. Wywołanie procedury składowanej z parametrem Out za pomocą PDO

  4. Sprawdzasz tabelę pod kątem nakładania się czasu?

  5. PDO były wierszami dotkniętymi podczas instrukcji execute