Posgresql按日期和特定ID选择头x行

问题描述 投票:1回答:1

我有这张桌子:

+----+--------+--------+-----------+----------------------------+
| id |  type  | amount | dealer_id |            date            |
+----+--------+--------+-----------+----------------------------+
| 12 | sub_s  | 29.00  |       502 | 2020-05-21 10:05:41.725+02 |
| 11 | sub_pe | 79.00  |       501 | 2020-05-20 09:05:41.725+02 |
| 10 | sub_pe | 79.00  |       501 | 2020-05-19 09:05:41.725+02 |
|  9 | sub_pe | 79.00  |       501 | 2020-05-18 09:05:41.725+02 |
|  8 | sub_pe | 79.00  |       501 | 2020-05-17 09:05:41.725+02 |
|  7 | sub_pe | 79.00  |       501 | 2020-05-16 09:05:41.725+02 |
|  6 | sub_pe | 79.00  |       501 | 2020-05-15 09:05:41.725+02 |
|  5 | sub_pe | 79.00  |       501 | 2020-05-14 09:05:41.725+02 |
|  4 | sub_pe | 79.00  |       501 | 2020-05-13 09:05:41.725+02 |
|  1 | sub_pe | 79.00  |       501 | 2020-05-12 09:05:41.725+02 |
+----+--------+--------+-----------+----------------------------+

我如何仅为每个Dealer_id选择前6行(按日期ASC排序?

因此得到的结果是:

+----+--------+--------+-----------+----------------------------+
| id |  type  | amount | dealer_id |            date            |
+----+--------+--------+-----------+----------------------------+
| 12 | sub_s  | 29.00  |       502 | 2020-05-21 10:05:41.725+02 |
|  8 | sub_pe | 79.00  |       501 | 2020-05-17 09:05:41.725+02 |
|  7 | sub_pe | 79.00  |       501 | 2020-05-16 09:05:41.725+02 |
|  6 | sub_pe | 79.00  |       501 | 2020-05-15 09:05:41.725+02 |
|  5 | sub_pe | 79.00  |       501 | 2020-05-14 09:05:41.725+02 |
|  4 | sub_pe | 79.00  |       501 | 2020-05-13 09:05:41.725+02 |
|  1 | sub_pe | 79.00  |       501 | 2020-05-12 09:05:41.725+02 |
+----+--------+--------+-----------+----------------------------+
sql postgresql select greatest-n-per-group
1个回答
2
投票

具有ROW_NUMBER()窗口功能:

select t.id, t.type, t.amount, t.dealer_id, t.date
from (
  select * ,
    row_number() over (partition by dealer_id order by date) rn
  from tablename
) t
where t.rn <= 6
© www.soinside.com 2019 - 2024. All rights reserved.