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