SQL-按分组中的一列进行限制

SQL-按分组中的一列进行限制,sql,hiveql,Sql,Hiveql,在尝试进行一个查询时,我根据每个指定标记花费的时间_,得出了前1000篇文章,我提出了以下查询,其中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 O

在尝试进行一个查询时,我根据每个指定标记花费的时间_,得出了前1000篇文章,我提出了以下查询,其中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
然而,这里使用限制1000的问题是,它限制了整个组,因此我总共只获得1000个结果,而不是为标记1、标记2和标记3中的每个获得1000个结果,即总共3000个结果

如何修改此查询,使限制仅出现在GROUP BY的e.post_id组件上?或者,是否有另一种方法可以为in子句中指定的每个标记获得1000个结果?

使用行编号:

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