users_can_register update_option page_for_posts mailserver_url add_option sql oracle group-by greatest-n-per-group ora-00979

sql - update_option - GROUP BY con MAX(DATE)



page_for_posts wordpress (6)

Esta pregunta ya tiene una respuesta aquí:

Estoy intentando enumerar el último destino (hora de salida MAX) para cada tren en una tabla, por ejemplo :

Train Dest Time 1 HK 10:00 1 SH 12:00 1 SZ 14:00 2 HK 13:00 2 SH 09:00 2 SZ 07:00

El resultado deseado debería ser:

Train Dest Time 1 SZ 14:00 2 HK 13:00

He intentado usar

SELECT Train, Dest, MAX(Time) FROM TrainTable GROUP BY Train

Obtuve un error "ora-00979 no una expresión GROUP BY" que decía que debía incluir "Dest" en mi grupo por declaración. Pero seguramente eso no es lo que quiero ...

¿Es posible hacerlo en una línea de SQL?


Aquí hay un ejemplo que solo usa una combinación de la izquierda y creo que es más eficiente que cualquier grupo por método: ExchangeCore Blog

SELECT t1.* FROM TrainTable t1 LEFT JOIN TrainTable t2 ON (t1.Train = t2.Train AND t1.Time < t2.Time) WHERE t2.Time IS NULL;


Mientras no haya duplicados (y los trenes tienden a llegar solo a una estación a la vez) ...

select Train, MAX(Time), max(Dest) keep (DENSE_RANK LAST ORDER BY Time) max_keep from TrainTable GROUP BY Train;


No puede incluir columnas no agregadas en su conjunto de resultados que no estén agrupadas. Si un tren tiene un solo destino, simplemente agregue la columna de destino a su cláusula group by, de lo contrario, debe reconsiderar su consulta.

Tratar:

SELECT t.Train, t.Dest, r.MaxTime FROM ( SELECT Train, MAX(Time) as MaxTime FROM TrainTable GROUP BY Train ) r INNER JOIN TrainTable t ON t.Train = r.Train AND t.Time = r.MaxTime


Otra solución:

select * from traintable where (train, time) in (select train, max(time) from traintable group by train);


Sé que llego tarde a la fiesta, pero intenta esto ...

SELECT `Train`, `Dest`, SUBSTRING_INDEX(GROUP_CONCAT(`Time` ORDER BY `Time` DESC), ",", 1) AS `Time` FROM TrainTable GROUP BY Train;

Src: Documentación grupal de Concat

Editar: sintaxis sql fija


SELECT train, dest, time FROM ( SELECT train, dest, time, RANK() OVER (PARTITION BY train ORDER BY time DESC) dest_rank FROM traintable ) where dest_rank = 1