Dúvida com variável MySQL
08/06/2022
0
Caros,
Estou analisando uma query no MySQL e não consigo entender como funciona uma determinada variável.
Alguém pode me explicar como ela atua? sei que ela cria uma sequência (uma espécie de contador de números repetidos denominado como campo nuSerie), mas como ela está fazendo isso não tenho ideia.
O que que gostaria de uma explicação (para um leigo entender mesmo) são esses trechos:
(SELECT @r := 0, @prevcol := null) x
@r := CASE WHEN tm_dado.dsGroup = @prevcol THEN @r + 1 WHEN (@prevcol := tm_dado.dsGroup) = null THEN null ELSE 1 END AS nuSerie
Query:
SELECT
tm_dado.coRecarga,
tm_dado.nuImsi,
tm_dado.coMsisdnHistorico,
@r := CASE WHEN tm_dado.dsGroup = @prevcol THEN @r + 1 WHEN (@prevcol := tm_dado.dsGroup) = null THEN null ELSE 1 END AS nuSerie
FROM
(SELECT
tb_recarga.coRecarga,
tb_recarga.nuImsi,
tb_msisdn_historico.coMsisdnHistorico,
CONCAT(tb_recarga.coRecarga,tb_recarga.nuImsi) as dsGroup
FROM tb_recarga
JOIN tb_msisdn_historico ON tb_recarga.nuImsi = tb_msisdn_historico.nuImsi
WHERE tb_recarga.dtCadastro >= CURDATE() - INTERVAL 1 DAY AND CURDATE()-1
) as tm_dado, (SELECT @r := 0, @prevcol := null) x
ORDER BY tm_dado.dsGroup,tm_dado.coMsisdnHistorico DESC
Estou analisando uma query no MySQL e não consigo entender como funciona uma determinada variável.
Alguém pode me explicar como ela atua? sei que ela cria uma sequência (uma espécie de contador de números repetidos denominado como campo nuSerie), mas como ela está fazendo isso não tenho ideia.
O que que gostaria de uma explicação (para um leigo entender mesmo) são esses trechos:
(SELECT @r := 0, @prevcol := null) x
@r := CASE WHEN tm_dado.dsGroup = @prevcol THEN @r + 1 WHEN (@prevcol := tm_dado.dsGroup) = null THEN null ELSE 1 END AS nuSerie
Query:
SELECT
tm_dado.coRecarga,
tm_dado.nuImsi,
tm_dado.coMsisdnHistorico,
@r := CASE WHEN tm_dado.dsGroup = @prevcol THEN @r + 1 WHEN (@prevcol := tm_dado.dsGroup) = null THEN null ELSE 1 END AS nuSerie
FROM
(SELECT
tb_recarga.coRecarga,
tb_recarga.nuImsi,
tb_msisdn_historico.coMsisdnHistorico,
CONCAT(tb_recarga.coRecarga,tb_recarga.nuImsi) as dsGroup
FROM tb_recarga
JOIN tb_msisdn_historico ON tb_recarga.nuImsi = tb_msisdn_historico.nuImsi
WHERE tb_recarga.dtCadastro >= CURDATE() - INTERVAL 1 DAY AND CURDATE()-1
) as tm_dado, (SELECT @r := 0, @prevcol := null) x
ORDER BY tm_dado.dsGroup,tm_dado.coMsisdnHistorico DESC
Reinaldo
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)