sql >> Base de Datos >  >> RDS >> Mysql

¿Se aplica ORDER BY antes o después de DISTINCT?

Dos cosas para entender:

  1. En términos generales, los conjuntos de resultados son desordenados a menos que especifique un ORDER BY cláusula; en la medida en que especifique un orden no estricto (es decir, ORDER BY sobre columnas no únicas), el orden en que los registros que son iguales bajo ese orden aparecen dentro del conjunto de resultados no está definido.

    Sospecho que puede estar especificando un orden tan poco estricto, que es la raíz de sus problemas:asegúrese de que su pedido sea estricto especificando ORDER BY sobre un conjunto de columnas que es suficiente para identificar de forma única cada registro cuya posición final le interesa en el conjunto de resultados.

  2. DISTINCT puede usar GROUP BY , lo que hace que los resultados se ordenen por columnas agrupadas; es decir, SELECT DISTINCT a, b, c FROM t producirá un conjunto de resultados que aparece como si ORDER BY a, b, c ha sido aplicado. Nuevamente, especificar un orden suficientemente estricto para satisfacer sus necesidades anulará este efecto.

Después de su actualización, teniendo en cuenta mi punto n.° 2 anterior, está claro que el efecto de agrupar los resultados para lograr DISTINCT hace que sea imposible ordenar por la columna no agrupada p.id; en cambio, quieres:

SELECT   t.*
FROM     Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC