Me gusta, hay una palabra clave superior en el servidor sql 2005, cómo seleccionar la primera fila en mysql si tengo join en la tabla múltiple & quiero recuperar el extremo de cada ID/columna. Límite restringe el no. de vueltas de fila por lo que no puede resolver mi problema.MYSQL arriba N filas de la combinación de múltiples tablas
Respuesta
SELECT v.*
FROM document d
OUTER APPLY
(
SELECT TOP 1 *
FROM version v
WHERE v.document = d.id
ORDER BY
v.revision DESC
) v
o
SELECT v.*
FROM document d
LEFT JOIN
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY v.id ORDER BY revision DESC)
FROM version
) v
ON v.document = d.id
AND v.rn = 1
Este último es más eficiente si sus documentos por lo general tienen pocas revisiones y hay que seleccionar todos o casi todos los documentos; el primero es más eficiente si los documentos tienen muchas revisiones o si necesita seleccionar solo un pequeño subconjunto de documentos.
Actualización:
Lo sentimos, no se dio cuenta que la pregunta es acerca MySQL
.
En MySQL
, lo haces de esta manera:
SELECT *
FROM document d
LEFT JOIN
version v
ON v.id =
(
SELECT id
FROM version vi
WHERE vi.document = d.document
ORDER BY
vi.document DESC, vi.revision DESC, vi.id DESC
LIMIT 1
)
Crear un índice compuesto en version (document, revision, id)
para que esto funcione rápido.
MySQL no admite 'APLICAR' o' ROW_NUMBER() '(funciones de ventana). –
@Bill: a la derecha, no se dio cuenta de que se trata de 'MySQL'. – Quassnoi
La respuesta posterior funciona, pero ¿qué pasa si para algunas filas solo tengo un registro, por ejemplo, la versión tiene solo un registro para un determinado ID de documento, en ese caso la consulta no recupera las filas de ese ID. Perdón por la respuesta tardía/comentario –
Si te entiendo correctamente, la parte superior tampoco resuelve tu problema. arriba es exactamente equivalente al límite. Lo que está buscando son funciones agregadas, como max() o min() si desea los extremos. por ejemplo:
select link_id, max(column_a), min(column_b) from table_a a, table_b b
where a.link_id = b.link_id group by link_id
- 1. La combinación Mysql da filas duplicadas
- 2. [MySQL]: ELIMINAR filas de dos tablas dependientes
- 3. mysql seleccionar desde n últimas filas
- 4. La combinación de celdas en tablas LaTeX
- 5. Rendimiento MySQL - Número de tablas vs. Número de filas
- 6. ¿Cómo suprimo el recuento de filas para las tablas agregadas (AUTO_INCREMENT = N) a la salida mysqldump?
- 7. 1000's de tablas o instancias múltiples de mysql?
- 8. mysql texto completo en tablas múltiples
- 9. ¿Cómo eliminar desde múltiples tablas en MySQL?
- 10. MySQL, filas múltiples para separar campos
- 11. ¿Cómo obtengo un recuento de filas asociadas en una combinación a la izquierda en MySQL?
- 12. combinación interna con varias tablas
- 13. Comparación de tablas de datos y cambios de combinación
- 14. Combinación de tablas complejas javascript & jquery algorithm
- 15. MySQL combinación izquierda + Mín
- 16. Actualizar varias filas con múltiples valores y múltiples condiciones mysql
- 17. la combinación de múltiples atributos en C#
- 18. Cómo agrupar los resultados de combinación interna de mysql de filas en columnas
- 19. eliminar filas de varias tablas
- 20. PHP MySQL de búsqueda múltiples tablas utilizando una palabra clave
- 21. Jquery Ocultar filas de tablas
- 22. Varias tablas combinación izquierda usando LINQ
- 23. Combinación de pseudo-selectores múltiples
- 24. Combinación de combinación izquierda y derecha en la consulta de mysql
- 25. MySql combinación interna con la cláusula WHERE
- 26. Mysql Eliminar múltiples filas aleatorias de una tabla
- 27. MySQL UPDATE, MAX, consulta de combinación
- 28. combinación izquierda no devolver todas las filas
- 29. MySQL + n
- 30. tablas de separación mysql
¿Quizás un ejemplo? – hsz
Sí, la pregunta no es muy clara. Acabo de adivinar –
La pregunta no es muy clara, pero supongo que es otro caso del problema '' mayor-por-grupo' que aparece con frecuencia. –