- Como não há chave primária definida, presumo que os dados sejam inseridos em ordem sequencial em
creation_date
eladder_level
. Lembre-se que os dados são armazenados de forma não ordenada no MySQL. - Primeiro, temos que usar uma consulta de subseleção para obter os dados na ordem necessária (como destacado na etapa anterior). Vale ressaltar que
Order By
é executado apósSelect
cláusula; então precisamos primeiro classificar os dados e, em seguida, usar o conjunto de resultados como um Tabela Derivada . - Agora, contaremos com a ajuda de User- variáveis definidas
(persistente e acessível em nível de sessão). Em outra tabela derivada
user_init_vars
, nós os inicializamos. - No
Select
cláusula, comparamos o valor da linha atual com o valor da linha anterior. Após a comparação, definimos o valor da variável para o valor da linha atual. Você pode pensar nisso como uma técnica de looping, que usamos em outras linguagens de programação como PHP, C++, Java etc. Case .. When
expressões são usadas para comparação e para determinar aladder_change
valor.
Consulta nº 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 |
Visualizar no DB Fiddle