Mysql
 sql >> база данни >  >> RDS >> Mysql

DISTINCT ON заявка с/ ORDER BY максимална стойност на колона

Това би било просто. Нямате нужда от max() нито DISTINCT за това:

SELECT *
FROM   profile_visits
WHERE  social_user_id = 21
AND    created_at > (now() - interval '2 months')
AND    visitor_id <> 21  -- ??
ORDER  BY created_at DESC NULLS LAST, id DESC NULLS LAST
LIMIT  6;

Подозирам, че въпросът ви е непълен. Ако искате:
6-те последни посетители с последното им посещение на страницата
тогава имате нужда от подзаявка. Не можете да получите този ред на сортиране в едно ниво на заявка, нито с DISTINCT ON , нито с функции на прозореца:

SELECT *
FROM  (
   SELECT DISTINCT ON (visitor_id) *
   FROM   profile_visits
   WHERE  social_user_id = 21
   AND    created_at > (now() - interval '2 months')
   AND    visitor_id <> 21  -- ??
   ORDER  BY visitor_id, created_at DESC NULLS LAST, id DESC NULLS LAST
   ) sub
ORDER  BY created_at DESC NULLS LAST, id DESC NULLS LAST
LIMIT  6;

Подзаявката sub получава последното посещение на потребител (но не по-старо от два месеца и не за определен посетител21 . ORDER BY трябва да има същите водещи колони като DISTINCT ON .

Нуждаете се от външната заявка, за да получите 6-те последни посетители.
Помислете за последователността от събития:

Защо NULLS LAST ? За да сте сигурни, не сте предоставили дефиницията на таблицата.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да напиша MYSQL заявка, която ще върне деца, вложени под родители?

  2. как да покажа съответен запис от достъп въз основа на друга колона в Datagrid във vb6

  3. MySQL Не може да пусне индекс, необходим при ограничение на външен ключ

  4. ANDROID&PHP - Как да покажа JSONArray от MySql с помощта на PHP

  5. Грешка MySQL Table не съществува, но съществува