Pregunta

Tengo una tabla con 3 campos:

  • ID (no clave no única, primaria)
  • timestamp
  • marker

Quiero conseguir la última entrada para cada ID distinta, pero cuando lo hago
SELECT ID, max(timestamp) from table GROUP BY ID
el campo marcador es incorrecto.

Tengo otra tabla con los siguientes campos:

  • ID (clave única, primaria)
  • lat
  • lng

Me gustaría realizar la misma consulta pero con los campos lat y lng así, pero como yo no puedo hacer el primer paso, no sé qué tipo de consulta se debe utilizar. He estado intentando sin éxito.

Podría alguien me punto en la dirección correcta? Muchas gracias.

¿Fue útil?

Solución

Tener una columna ID que no es sonidos únicos "inesperada", pero éste debe conseguir que las filas esperados:

SELECT t.id, t.timestamp, MAX( t.marker ) marker,
       t2.lat, t2.lng
FROM table t
JOIN (
    SELECT id, MAX(timestamp) ts
    FROM table
    GROUP BY id
) tx ON ( tx.id = t.id AND tx.ts = t.timestamp )
JOIN t2 ON ( t2.id = tx.id )
GROUP BY t.id, t.timestamp

El segundo grupo de se asegurará de que usted consigue solamente una fila en caso de que haya más registros para el mismo id y timestamp.

Actualizar : consulta Editado para unirse t2

.

Uso LEFT JOIN en caso de que haya ids en t1 que no existen en t2. lat y lng entonces serían NULL para que las filas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top