如何仅按单个列进行过滤?

时间:2019-10-21 16:04:41

标签: sql postgresql

我有一个SQL,它给出以下结果。

!(https://imgur.com/a/cQjceR2

我想按第一列“ eventid”过滤结果,其中仅显示特定月份的前三个结果。

例如,在图像中,第12个月有四个事件ID,在新结果中将只有三个。

以下是sql。

select eventid, qtysold, pricepaid, qtysold*pricepaid as total_sales_by_tickets,
"date_part"('month'::text, saletime) AS month_id 
from public.sales
group by eventid, qtysold, pricepaid, total_sales_by_tickets, month_id
ORDER BY qtysold desc, "date_part"('month'::text, saletime desc; 

1 个答案:

答案 0 :(得分:1)

您可以使用row_number()

select eventid, qtysold, pricepaid, qtysold*pricepaid as 
       total_sales_by_tickets,
       date_trunc('month'::text, saletime) AS month_id 
from (select s.*,
             row_number() over (partition by eventid, date_trunc('month'::text, saletime) order by saletime) as seqnum
      from public.sales s
     ) s
where seqnum <= 3
order by qtysold desc, date_trunc('month'::text, saletime) desc;

我不确定您为什么使用"date_part"()。我更喜欢date_trunc()选择日期的月份部分。

此外,我认为没有必要进行汇总。您当然没有使用任何聚合函数,因此group by似乎是多余的。