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.
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:
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.