es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eliminando registros duplicados con ids antiguas en SQL/ HiveQL

Tengo una tabla como la siguiente. En esta tabla tenemos múltiples registros idénticos con solo un refresh_id diferente. Pero tenemos que seleccionar los registros con el último refresh_id, por ejemplo, tenemos que eliminar las filas en negrita/resaltado ya que sus duplicados están disponibles con el último refresh_id. Por favor ayúdame a resolver este problema usando SQL/HiveQL.

día idde producto refreshid
11/19/2021 abcd 1637515839
11/19/2021 abcd 1637515839
11/19/2021 abcd 1637515839
11/19/2021 abcd 1637515839
11/19/2021 abcd 1637430516
11/19/2021 efgh 1637430516
12/11/2021 ijkl 1637430516
12/11/2021 ijkl 1637430250

Salida:

día idde producto refreshid
11/19/2021 abcd 1637515839
11/19/2021 abcd 1637515839
11/19/2021 abcd 1637515839
11/19/2021 abcd 1637515839
11/19/2021 efgh 1637430516
12/11/2021 ijkl 1637430516

He intentado la siguiente consulta como un intento pero no parece ayudar en absoluto, por favor dame alguna pista.

select mod_op.day, mod_op.id_de_producto, mod_op.refresh_id
    , dense_rank() over(partition by mod_op.day,mod_op.id_de_producto order by mod_op.refresh_id desc) as dense_rank
from tabla mod_op
where mod_op.refresh_id in (refresh_id1, refresh_id2);
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para seleccionar los registros con el último refresh_id y eliminar los duplicados, puede utilizar la siguiente consulta SQL/HiveQL:

    SELECT day, product_id, refresh_id
    FROM (
      SELECT day, product_id, refresh_id,
             ROW_NUMBER() OVER (PARTITION BY day, product_id ORDER BY refresh_id DESC) AS rn
      FROM your_table
    ) t
    WHERE rn = 1
    

    Aquí, utilizamos una subconsulta para asignar un número de fila a cada registro basado en su refresh_id dentro de cada combinación de día y product_id. Luego, seleccionamos solo los registros donde el número de fila es 1, lo que corresponde al último refresh_id para cada combinación.

    Esta consulta le debería dar el resultado deseado, como se muestra en la tabla a continuación:

    day product_id refresh_id
    11/19/2021 abcd 1637515839
    11/19/2021 abcd 1637515839
    11/19/2021 abcd 1637515839
    11/19/2021 abcd 1637515839
    11/19/2021 efgh 1637430516
    12/11/2021 ijkl 1637430516

Comments are closed.