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.

Descubrir los registros: los primeros dos registros de fechas de cada miembro de cada año – db2udb.

Necesito ayuda:
Escenario: Tengo una tabla llamada testdata con las columnas

memberid (varchar), codetype(varchar), effectivedate(datetime)

Esta tabla tiene 20.000 registros, desde el año 2015 hasta el 2021.
Necesito encontrar los primeros dos registros de cada miembro de cada año (solo memberid es único).
Por ejemplo:
|member id| codetype| effectivedate|
|———|———|————–|
|123| ABC| 1/2/2015|
|123| ABC| 1/2/2015|
|123| ABC| 8/15/2015|
|123| EFG| 9/15/2015|
|123| EFG| 2/15/2018|
|345| EFG| 3/14/2018|
|345| EFG| 3/17/2018|
|345| ABC| 9/19/2020|
|456| EFG| 12/20/2021|
El resultado debería ser como el siguiente:
|member id| codetype| effectivedate|
|———|———|————–|
|123| ABC| 1/2/2015|
|123| ABC| 1/2/2015|
|123| ABC| 2/15/2018|
|345| EFG| 3/14/2018|
|345| EFG| 3/17/2018|
|345| ABC| 9/19/2020|
|456| EFG| 12/20/2021|
He intentado de muchas maneras, pero hasta ahora no he tenido suerte.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes utilizar instrucciones SQL para consultar la tabla de datos de prueba y filtrar los registros deseados. Aquí tienes un ejemplo de instrucción SQL que debería funcionar:

    SELECT memberid, codetype, MIN(effectivedate) AS effectivedate
    FROM testdata
    WHERE effectivedate IN (
      SELECT MIN(effectivedate)
      FROM testdata
      WHERE YEAR(effectivedate) = YEAR(t.effectivedate) AND memberid = t.memberid
      GROUP BY memberid
      ORDER BY MIN(effectivedate)
      LIMIT 2
    ) 
    GROUP BY memberid, codetype, YEAR(effectivedate)
    

    Esta instrucción primero selecciona el memberid, codetype y la fecha de efecto mínima para cada registro en la tabla de datos de prueba donde la fecha de efecto es igual a la fecha de efecto mínima para ese memberid en ese año. Esto se logra utilizando una subconsulta para filtrar las dos fechas más tempranas para cada memberid en un año dado, y luego seleccionar los registros correspondientes. Los resultados se agrupan por memberid, codetype y año para eliminar cualquier registro duplicado.

    Es posible que necesites ajustar esta instrucción SQL para tu entorno de base de datos específico y el esquema de tabla.

Comments are closed.