如何select每个ID的最后一条记录

How to select the last record of each ID

我需要从 table 中提取每个用户的最后记录。 table 架构如下所示。

mytable

product | user_id |
-------------------
   A    |   15    |
   B    |   15    |
   A    |   16    |
   C    |   16    |
-------------------

我想要得到的输出是

product | user_id |
-------------------
   B    |   15    |
   C    |   16    |

基本上是每个用户的最后一条记录。

提前致谢!

您可以尝试使用 row_number()

select product,iserid
from
(
select product, userid,row_number() over(partition by userid order by product desc) as rn
from tablename
)A where rn=1

您应该有一个存储广告订单的列。无论是通过自动递增还是带有日期和时间的值。

例如:

autoIncrement produt user_id
1 A 15
2 B 15
3 A 16
4 C 16
SELECT produt, user_id FROM table inner join 
     ( SELECT MAX(autoIncrement) as id FROM table group by user_id ) as table_Aux
     ON table.autoIncrement = table_Aux.id
     

您可以使用名为 ROW_NUMBER 的 window 函数。下面是为您提供的解决方案。我还在 db-fiddle 中为您做了一个演示查询。请勾选 link Demo Code in DB-Fiddle

WITH CTE AS
(SELECT product, user_id,
       ROW_NUMBER() OVER(PARTITION BY user_id order by product desc)
       as RN
FROM Mytable)
SELECT product, user_id FROM CTE WHERE RN=1 ;

没有“最后”记录这样的东西,除非您有一列指定了顺序。 SQL 表表示无序集(从技术上讲,多重集)。

如果你有这样的列,那么使用distinct on:

select distinct on (user_id) t.*
from t
order by user_id, <ordering col> desc;

Distinct on 是一个非常方便的 Postgres 扩展,returns 每个“组”一行。它是基于 order by 子句中指定的顺序的第一行。