none
Comparacion de registros de una misma columna RRS feed

  • Pregunta

  • Hola,

    Quería consultar: ¿Es posible hacer la comparación de registros de una misma columna(el anterior registro, para ser más específico) en SQL? Por ejemplo, tengo la siguiente tabla (suponiendo sea una hoja de Excel):

    A

    B

    C

    1

    ID Contacto

    ID SubContacto

    Conteo

    2

    374853263

    396512537

    1

    3

    374853263

    396512538

    0

    4

    374853265

    396512542

    1

    5

    374853279

    396512556

    1

    6

    374853279

    396512557

    0

    7

    374853282

    396512560

    1

    8

    374853297

    396512575

    1

    9

    374853299

    396512577

    1

    10

    374853306

    396512584

    1

    11

    374853346

    396512624

    1

    12

    374853346

    396512625

    0

    13

    374853346

    396512626

    0

    14

    374853346

    396512627

    0

    15

    374853346

    396512628

    0


    Lo que necesito es contabilizar los ID Contacto en base al anterior registro. En excel sería sencillo, algo como "=SI(A2=A1,0,1)". Pero mi consulta si es posible hacer este cálculo también en SQL.

    Nota: Los ID Contacto "duplicados" siempre se encuentran uno debajo del otro, así que no hay inconveniente al hacer ese cálculo en Excel.

    martes, 24 de septiembre de 2019 20:49

Todas las respuestas

  • Sí, se puede hacer siempre que sea un SQL Server razonablemente moderno, que soporte la cláusula OVER junto con la función LAG. En uno más antiguo se podría hacer con una subconsulta, pero sería muy poco eficiente.

    Más o menos es algo parecido a lo siguiente:

    Select IdContacto, IdSubcontacto, case when (LAG(IdContacto, 1) over (order by IdContacto))=IdContacto then 1 else 0 end As Conteo from laTabla order by IdContacto

    martes, 24 de septiembre de 2019 20:59
  • Deleted
    martes, 24 de septiembre de 2019 21:01
  • ¿Es posible realizarlo mediante un Update? Lo que ocurre es que esa columna ya se encuentra en la base, solo que está vacío, como para ser actualizado.
    martes, 24 de septiembre de 2019 21:52
  • Ok, te pongo un UPDATE con una subconsulta:

    UPDATE laTabla as a SET Conteo=CASE WHEN EXISTS(Select 1 from laTabla as b WHERE a.IdContacto=b.IdContacto AND a.IDSubcontacto<bIdSubcontacto) THEN 0 ELSE 1 END

    miércoles, 25 de septiembre de 2019 5:49
  • Deleted
    miércoles, 25 de septiembre de 2019 10:36