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

SQL Vrátí 1,0 v nové proměnné na základě případu, kdy příkaz odkazuje na více jiných proměnných

  • Vzhledem k tomu, že není definován žádný primární klíč, předpokládám, že data jsou zadávána v sekvenčním pořadí k creation_date a ladder_level . Pamatujte že data jsou v MySQL uložena neuspořádaným způsobem.
  • Nejprve musíme použít podvýběrový dotaz, abychom získali data v požadovaném pořadí (jak bylo zvýrazněno v předchozím kroku). Je pozoruhodné, že Order By se provede po Select doložka; takže budeme muset nejprve seřadit data a poté použít sadu výsledků jako Odvozená tabulka .
  • Nyní využijeme pomoci User- definované proměnné (trvalé a dostupné na úrovni relace). V jiné odvozené tabulce user_init_vars , inicializujeme je.
  • V Select klauzule, porovnáme hodnotu aktuálního řádku s hodnotou předchozího řádku. Po porovnání nastavíme hodnotu proměnné na hodnotu aktuálního řádku. Můžete si to představit jako techniku ​​smyčkování, kterou používáme v jiných programovacích jazycích, jako je PHP, C++, Java atd.
  • Case .. When výrazy se používají pro porovnání a určení ladder_change hodnotu.

Dotaz č. 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            |

Zobrazit na DB Fiddle




  1. Instalace SQL Server Failover Cluster -4

  2. MYSQL zobrazuje nesprávné řádky při použití GROUP BY

  3. SQLite JSON_ARRAY_LENGTH()

  4. Jak získat hodnotu SQL_CALC_FOUND_ROWS pomocí připravených příkazů?