Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wybierz N rekordów dla każdej kategorii i uporządkuj według X

MySQL nie obsługują funkcje analityczne (ROW_NUMBER, RANK, DENSE_RANK, NTILE...), ale możesz emulować funkcjonalność za pomocą zmiennych.

Jeśli chcesz N najnowsze posty na blogu:

SELECT x.id,
       x.title,
       x.description,
       x.cat,
       x.filename,
       x.date
  FROM (SELECT bp.id,
               bp.title,
               bp.description,
               bp.cat,
               bp.filename,
               bp.date,
               CASE 
                 WHEN bp.cat = @category THEN @rownum := @rownum + 1
                 ELSE @rownum := 1
               END AS rank,
               @category := bp.cat
          FROM BLOG_POSTS bp
          JOIN (SELECT @rownum := 0, @category := NULL) r
      ORDER BY bp.cat, bp.date DESC) x
 WHERE x.rank <= N

Jeśli chcesz, aby pozycja 1 była najwcześniejszym postem na blogu, zmień ORDER BY na:

ORDER BY bp.cat, bp.date


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można wstawić GeomFromText('POINT(..)') w MySQL

  2. Zrozumienie zestawów znaków i sortowania w MySQL

  3. Snow Leopard + Ruby 1.9.1 + Klejnot MySQL =Ogromne problemy

  4. Dodaj dodatkową kolumnę danych podczas korzystania z funkcji LOAD DATA LOCAL INFILE

  5. Zapytanie SQL do sortowania i uzyskiwania unikatowej liczby