Consulta SQL comparando filas dentro de la tabla (Oracle DB)

llasarov

En una base de datos de Oracle tengo una tabla con contenido similar a este:

Market_Intro_Date  Change_Date  Author
-------------------------------------------
   01.06.2025      10.07.2020   Meyer     *
   01.01.2025      30.06.2020   Harrin
   01.01.2025      01.05.2020   Floyd
   01.01.2025      15.04.2020   Peterson  *
   01.12.2024      20.03.2020   George
   01.12.2024      10.03.2020   Smith
   01.12.2024      15.01.2020   George    *
   01.01.2025      15.12.2019   Lee
   01.01.2025      01.11.2019   Alfonso
   01.01.2025      10.10.2019   Peterson  *
   01.07.2025      30.09.2019   Smith     *
   01.07.2024      20.09.2019   Lee
   01.07.2024      10.09.2019   Meyer     
   01.07.2024      01.05.2019   Smith     *

Necesito una consulta SQL que devuelva la primera aparición de cada cambio de la fecha de introducción al mercado (marcada con * al final) junto con la fecha de cambio y el autor.

Entonces el resultado de la consulta será:

Market_Intro_Date  Change_Date  Author
-------------------------------------------
   01.06.2025      10.07.2020   Meyer     
   01.01.2025      15.04.2020   Peterson  
   01.12.2024      15.01.2020   George    
   01.01.2025      10.10.2019   Peterson  
   01.07.2024      01.05.2019   Smith     

Gracias de antemano

Alex Poole

Puede utilizar la agregación, con la keep ... firstextensión:

select Market_Intro_Date,
  min(Change_Date) as Change_Date,
  min(Author) keep (dense_rank first order by Change_Date) as Author
from your_table
group by Market_Intro_Date

MARKET_INTRO_DATE | CHANGE_DATE | AUTHOR  
:---------------- | :---------- | :-------
01-JUL-24         | 01-MAY-19   | Smith   
01-DEC-24         | 15-JAN-20   | George  
01-JAN-25         | 10-OCT-19   | Peterson
01-JUN-25         | 10-JUL-20   | Meyer   
01-JUL-25         | 30-SEP-19   | Smith   

Leer más .


Me perdí que una de las fechas se repite, por lo que es un problema de brechas e islas. Tabibitosán al rescate:

select Market_Intro_Date,
  min(Change_Date) as Change_Date,
  min(Author) keep (dense_rank first order by Change_Date) as Author
from (
  select Market_Intro_Date, Change_Date, Author,
    row_number() over (partition by Market_Intro_Date order by Change_Date)
      - row_number() over (order by Change_Date) as grp
  from your_table
)
group by Market_Intro_Date, grp
order by Change_Date desc;

MARKET_INTRO_DATE | CHANGE_DATE | AUTHOR  
:---------------- | :---------- | :-------
01-JUN-25         | 10-JUL-20   | Meyer   
01-JAN-25         | 15-APR-20   | Peterson
01-DEC-24         | 15-JAN-20   | George  
01-JAN-25         | 10-OCT-19   | Peterson
01-JUL-25         | 30-SEP-19   | Smith   
01-JUL-24         | 01-MAY-19   | Smith   

db <> violín

Esto también tiene una segunda fila para Smith, pero parece correcto; No estoy seguro de si los datos de la muestra no incluyeron un asterisco o si el 01.07.2025 fue un error tipográfico.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Oracle sql compara filas dentro de la tabla / conjunto de datos dinámicamente

Comparando las dos filas consecutivas en Oracle de la misma tabla

Contar filas de otra tabla SQL en la misma consulta

Copie filas desde y dentro de la misma tabla SQL de Oracle y cambie algunos valores de columna

Comparando dos filas en la misma tabla SQL

Comparando dos filas en la misma tabla SQL

Combinar filas dentro de la tabla

Seleccione la consulta comparando 2 valores de tabla

Eliminar la consulta de la tabla de millones de filas con límite en mi sql

La consulta de SQL Server extrae dos filas diferentes de la misma tabla

Consulta SQL de ORACLE para filas relacionadas

Consulta SQL selecciona las filas superior e inferior de cada lote de la tabla

Comparando filas con la consulta Mysql

Cuente el número de filas cuando use dplyr para acceder a la tabla / consulta SQL

Consulta SQL para transponer filas a columnas en la tabla de MS Access

Consulta SQL para considerar las filas de la tabla actual y excluir los datos presentes en la otra tabla

Oracle SQL: actualice varias filas en Oracle usando una subconsulta de la misma tabla

Consulta de Oracle para hacer coincidir todos los valores de la lista entre todas las filas de la tabla

Comparando filas dentro de grupos, pandas

SQL: contar filas de la tercera tabla

Obtenga las primeras N filas de la tabla según la condición - Oracle SQL

Hacer un recuento de filas en la tabla de consulta

Oracle SQL: combinación de varias filas de la misma tabla en su propia fila

Devuelve la matriz de la consulta SQL de Linq en una tabla de 80 millones de filas usando EFCore

Recorrido dentro de las filas de la tabla

Recorrido dentro de las filas de la tabla

Reconfigurar los datos de la columna de la tabla en filas a través de una consulta SQL

Agregar filas continuas dentro de una tabla SQL

Rellenar filas en la tabla con el valor de fila anterior oracle sql