SQL - LIMIT на один столбец в GROUP BY - PullRequest
0 голосов
/ 05 июня 2018

Пытаясь создать запрос, в котором я извлекаю 1000 лучших сообщений (по time_spent) за указанный тег , я пришел к следующему запросу, где 1, 2, 3 - это указанные теги:

SELECT g.tagid, e.post_id, SUM(e.time_spent) AS time
  FROM   post_table e
  JOIN (SELECT g.postid, g.tagid
          FROM   tags_table g
          WHERE  g.tagid IN (1, 2, 3)) g
       ON e.post_id = g.postid
  WHERE dt >= '2018-06-01'
  GROUP BY g.tagid, e.post_id
  ORDER BY time DESC
  LIMIT  1000

Однако проблема с использованием LIMIT 1000 заключается в том, что он ограничивает всю группу и делает так, что я получаю всего 1000 результатов вместо 1000 результатов для каждого тега 1, тега2, и тег 3 (т.е. всего 3000 результатов).

Как изменить этот запрос так, чтобы LIMIT встречался только в компоненте e.post_id GROUP BY?Или, альтернативно, есть ли другой способ получения 1000 результатов для каждого из тегов, указанных в предложении IN?

1 Ответ

0 голосов
/ 05 июня 2018

Использование row_number():

SELECT ge.*
FROM (SELECT g.tagid, e.post_id, SUM(e.time_spent) AS time,
             ROW_NUMBER() OVER (PARTITION BY g.tagid ORDER BY SUM(e.time_spent) ) as seqnum
      FROM post_table e JOIN 
           tags_table g
           ON e.post_id = g.postid
      WHERE  g.tagid IN (1, 2, 3) AND dt >= '2018-06-01'
      GROUP BY g.tagid, e.post_id
     ) ge
WHERE seqnum <= 1000
ORDER BY t.tagid, time DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...