sql >> Databáze >  >> RDS >> Mysql

MySQL pořadí podle před seskupit podle

Pomocí ORDER BY v poddotazu není nejlepším řešením tohoto problému.

Nejlepší řešení, jak získat max(post_date) Autorem je použít dílčí dotaz k vrácení maximálního data a poté jej připojit ke své tabulce v post_author a maximální datum.

Řešení by mělo být:

SELECT p1.* 
FROM wp_posts p1
INNER JOIN
(
    SELECT max(post_date) MaxPostDate, post_author
    FROM wp_posts
    WHERE post_status='publish'
       AND post_type='post'
    GROUP BY post_author
) p2
  ON p1.post_author = p2.post_author
  AND p1.post_date = p2.MaxPostDate
WHERE p1.post_status='publish'
  AND p1.post_type='post'
order by p1.post_date desc

Pokud máte následující ukázková data:

CREATE TABLE wp_posts
    (`id` int, `title` varchar(6), `post_date` datetime, `post_author` varchar(3))
;

INSERT INTO wp_posts
    (`id`, `title`, `post_date`, `post_author`)
VALUES
    (1, 'Title1', '2013-01-01 00:00:00', 'Jim'),
    (2, 'Title2', '2013-02-01 00:00:00', 'Jim')
;

Poddotaz vrátí maximální datum a autora:

MaxPostDate | Author
2/1/2013    | Jim

Poté, co to připojíte zpět k tabulce, na obou hodnotách vrátíte úplné podrobnosti tohoto příspěvku.

Viz SQL Fiddle s ukázkou .

Abych rozšířil své komentáře o použití poddotazu k přesnému vrácení těchto dat.

MySQL vás nenutí GROUP BY každý sloupec, který zahrnete do SELECT seznam. V důsledku toho, pokud pouze GROUP BY jeden sloupec, ale vrátí celkem 10 sloupců, není zaručeno, že hodnoty ostatních sloupců, které patří post_author která se vrací. Pokud sloupec není v GROUP BY MySQL vybere, jaká hodnota má být vrácena.

Použití poddotazu s agregační funkcí zaručí, že se pokaždé vrátí správný autor a příspěvek.

Jako vedlejší poznámku, zatímco MySQL vám umožňuje použít ORDER BY v dílčím dotazu a umožňuje vám použít GROUP BY na ne každý sloupec v SELECT seznam toto chování není povoleno v jiných databázích včetně SQL Server.



  1. Spuštění MariaDB v nastavení hybridního cloudu

  2. Jak vrátit počet řádků ve výsledku dotazu na serveru SQL Server

  3. Materialized Views – Identifikace poslední aktualizace

  4. ORA-12728:neplatný rozsah v regulárním výrazu