Advertisement
kuroshan1104

COMPARAR DEUDAS RECIBO LUZ

Jan 21st, 2025
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 1.38 KB | Source Code | 0 0
  1. -- Paso 1: Filtrar los datos relevantes
  2. CREATE TEMPORARY TABLE tmp_filtrados AS
  3. SELECT
  4.     idpersona,
  5.     idperiodo
  6. FROM
  7.     d_deuda
  8. WHERE
  9.     idperiodo BETWEEN 226 AND 233
  10.     AND idconcepto = 6;
  11.  
  12. -- Paso 2: Generar números correlativos por idpersona ordenados por idperiodo
  13. SET @row_number := 0;
  14. SET @current_idpersona := NULL;
  15.  
  16. CREATE TEMPORARY TABLE tmp_correlativos AS
  17. SELECT
  18.     idpersona,
  19.     idperiodo,
  20.     (@row_number := IF(@current_idpersona = idpersona, @row_number + 1, 1)) AS rn,
  21.     (@current_idpersona := idpersona) AS dummy
  22. FROM
  23.     tmp_filtrados
  24. ORDER BY
  25.     idpersona, idperiodo;
  26.  
  27. -- Paso 3: Calcular la diferencia entre idperiodo y rn para detectar rupturas
  28. CREATE TEMPORARY TABLE tmp_diferencias AS
  29. SELECT
  30.     idpersona,
  31.     idperiodo,
  32.     rn,
  33.     idperiodo - rn AS diferencia
  34. FROM
  35.     tmp_correlativos;
  36.  
  37. -- Paso 4: Crear una tabla temporal para almacenar el conteo de cada grupo
  38. CREATE TEMPORARY TABLE tmp_rupturas AS
  39. SELECT
  40.     idpersona,
  41.     diferencia,
  42.     COUNT(*) AS cuenta
  43. FROM
  44.     tmp_diferencias
  45. GROUP BY
  46.     idpersona, diferencia;
  47.  
  48. -- Paso 5: Detectar las rupturas comparando el total de filas por idpersona
  49. SELECT DISTINCT
  50.     d.idpersona
  51. FROM
  52.     tmp_diferencias d
  53. LEFT JOIN
  54.     tmp_rupturas r ON d.idpersona = r.idpersona
  55. GROUP BY
  56.     d.idpersona
  57. HAVING
  58.     SUM(r.cuenta) < COUNT(d.idperiodo);
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement