sql >> Databasteknik >  >> RDS >> Mysql

MySQL Beställ före Gruppera efter

select wp_posts.* from wp_posts
where wp_posts.post_status='publish'and wp_posts.post_type='post'
group by wp_posts.post_author
having wp_posts.post_date = MAX(wp_posts.post_date) /* ONLY THE LAST POST FOR EACH AUTHOR */
order by wp_posts.post_date desc

EDIT:

Efter några kommentarer har jag bestämt mig för att lägga till ytterligare information.

Företaget jag jobbar på använder också Postgres och speciellt SQL Server. Dessa databaser tillåter inte sådana frågor. Så jag vet att det finns ett annat sätt att göra detta (jag skriver en lösning nedan). Du bör också behöva veta vad du gör om du inte grupperar efter alla kolumner som behandlas i projektionen eller använder aggregerade funktioner. Annars låt det vara!

Jag valde lösningen ovan, eftersom det är en specifik fråga. Tom vill få det senaste inlägget för varje författare på en wordpress-sajt. I mina ögon är det försumbart för analysen om en författare gör mer än ett inlägg per sekund. Wordpress borde till och med förbjuda det genom dess upptäckt av spam-dubbelinlägg. Jag vet av personlig erfarenhet att det finns en riktigt betydande fördel med att prestera att göra en så smutsig grupp med MySQL. Men om du vet vad du gör, då kan du göra det! Jag har så smutsiga grupper i appar som jag är professionellt ansvarig för. Här har jag tabeller med några mio-rader som behöver 5-15 sekunder istället för 100++ sekunder.

Kan vara användbart om några för- och nackdelar:http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/debunking-group-by-myths.html

SELECT
    wp_posts.*
FROM 
    wp_posts
    JOIN 
    (
        SELECT
            g.post_author
            MAX(g.post_date) AS post_date
        FROM wp_posts as g
        WHERE
            g.post_status='publish'
            AND g.post_type='post'
        GROUP BY g.post_author
    ) as t 
    ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date

ORDER BY wp_posts.post_date

Men om det är mer än ett inlägg per sekund för en författare får du mer än en rad och inte den enda sista .

Nu kan du snurra på hjulet igen och få inlägget med det högsta Id . Även här är det åtminstone inte garanterat att du verkligen får den sista.



  1. Hur man returnerar element från en JSON-array i MariaDB

  2. Hur kan jag generera en unik sträng per post i en tabell i Postgres?

  3. Hitta dubbletter av poster i MySQL

  4. Hur man returnerar alla otillförlitliga CHECK-begränsningar i SQL Server (T-SQL-exempel)