Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL Retorna 1,0 na nova variável com base no caso quando a instrução se refere a várias outras variáveis

  • Como não há chave primária definida, presumo que os dados sejam inseridos em ordem sequencial em creation_date e ladder_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ós Select 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 a ladder_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