Cómo aplicar fin de GROUP BY

Forsberg:

Tengo la articlemesa, cada uno con una categoría relacionada (o NULL si no categorizado - estos artículos no me interesan en este caso).

Quiero obtener 8 más nuevos artículos cada uno de una categoría de una manera que siempre hay sólo un artículo de una categoría (es decir, nunca 2 artículos de la misma categoría).

Esta consulta casi trabajo:

SELECT article.id, article.title, category_container.title  FROM `article`
JOIN `category_container` ON category_container.id = article.category_id
WHERE `category_id` IS NOT NULL GROUP BY `category_id` ORDER BY article.created_at DESC LIMIT 8

El problema es, ORDEN no funciona. Quiero más reciente, me devuelve los primeros (con el más pequeño de identificación, mientras que debería ser todo lo contrario).

Por lo tanto, la forma de aplicar el fin de GROUP BY?

Gordon Linoff:

No lo hace. Su consulta se divide - y en las últimas versiones de MySQL que obtendría un error correctamente.

En lugar de utilizar un filtrado método para obtener las últimas filas. Aquí es un método que utiliza una consulta correlacionada:

SELECT a.id, a.title, cc.title
FROM article a JOIN
     category_container cc
     ON cc.id = a.category_id
WHERE a.created_at = (SELECT MAX(a2.created_at)
                      FROM article a2
                      WHERE a2.category_id = a.category_id
                     )
ORDER BY a.created_at DESC
LIMIT 8;

Para obtener un rendimiento, desea un índice en article(category_id, created_at).

En las versiones más recientes, esto sería aún más sencillo el uso de ROW_NUMBER():

SELECT a.id, a.title, cc.title
FROM (SELECT a.*,
             ROW_NUMBER() OVER (PARTITION BY a.category_id ORDER BY a.created_at DESC) as seqnum
      FROM article a
     ) a JOIN
     category_container cc
     ON cc.id = a.category_id
WHERE seqnum = 1;

Teniendo en cuenta que la consulta se ejecuta sin errores, probablemente se está utilizando una versión anterior de MySQL y esto no funcionará.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=298674&siteId=1
Recomendado
Clasificación