none
Como elieminar filas duplicadas sin llamar la llave primaria RRS feed

  • Pregunta

  • Hola a todo utilizo SQL Server R2

    Tengo una tabla que se llama citas la cual contiene los campos Ope_IdReg(llave primaria), Nombre, Ope_Fecha y Ope_Hora.

    Ee esta tabla guardo informacion de las citas del los clientes entonces en el campo Ope_Fecha tengo fechas repetidas porque se guardan con horario diferente.

    Necesito eliminar la filas duplicadas del campo Ope_Fecha pero la llave primraria que es Ope_IdReg debe de esta en el query, ya que lo utilizo forsozamente para enlazarlo con un control en programación.

    Lo intente hacer de esta manera pero tampoco me sirve ya que me devuelve todos los registros por el campo Ope_IdReg

    select distinct Ope_IdReg, Ope_Fecha from Citas; y solo necesito eliminar las fechas duplicadas

    viernes, 20 de abril de 2018 15:07

Respuestas

  • Select MAX(Ope_IdReg) as OpeIdreg, Ope_Fecha from Citas Group by Ope_Fecha Having Count(*)>1

    Eso te devuelve todas las fechas duplicadas, y por cada una de las duplicadas te devuelve el ID mas alto (obviamente cada una de las duplicadas tiene un ID distinto).


    Si no era eso lo que querias, ponnos un ejemplo. Escribe un ejemplo de tabla con datos, y debajo escribe como tendrian que quedar los resultados al alimentar la consulta con esos datos.
    viernes, 20 de abril de 2018 15:19

Todas las respuestas

  • Select MAX(Ope_IdReg) as OpeIdreg, Ope_Fecha from Citas Group by Ope_Fecha Having Count(*)>1

    Eso te devuelve todas las fechas duplicadas, y por cada una de las duplicadas te devuelve el ID mas alto (obviamente cada una de las duplicadas tiene un ID distinto).


    Si no era eso lo que querias, ponnos un ejemplo. Escribe un ejemplo de tabla con datos, y debajo escribe como tendrian que quedar los resultados al alimentar la consulta con esos datos.
    viernes, 20 de abril de 2018 15:19
  • Lo primero es no llamar [Ope_IdReg] una llave primaria ya que que de ser asi no tendrias duplicados.

    En cuanto a elminar los duplicados, una forma seria enumerando las filas particionadas por (Ope_IdReg, Ope_Fecha) y eliminar todas aquellas cuya enumeracion es mayor a uno.

    with R as (
    select
        Ope_IdReg, Ope_Fecha,
        row_number() over(partition by Ope_IdReg, Ope_Fecha order by (SELECT NULL)) as rn
    from
        Citas
    )
    delete R
    where rn > 1;

    Una vez eliminado los duplicados, asegurate de agregar una restriccion de clave unica para que no te vuelva a insertar duplicados.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    viernes, 20 de abril de 2018 18:40