我需要从表中提取每个用户的最后一条记录。表架构如下所示。
mytable
product | user_id |
-------------------
A | 15 |
B | 15 |
A | 16 |
C | 16 |
-------------------
我想得到的输出是
product | user_id |
-------------------
B | 15 |
C | 16 |
基本上是每个用户的最后一条记录。
提前致谢!
答案 0 :(得分:1)
您可以使用名为 ROW_NUMBER
的窗口函数。下面为您提供了一个解决方案。我还在 db-fiddle 中为你做了一个演示查询。请检查链接 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 ;
答案 1 :(得分:1)
除非您有指定排序的列,否则没有“最后”记录之类的东西。 SQL 表表示无序集(从技术上讲,多集)。
如果您有这样的列,请使用 distinct on
:
select distinct on (user_id) t.*
from t
order by user_id, <ordering col> desc;
Distinct on
是一个非常方便的 Postgres 扩展,它为每个“组”返回一行。它是基于 order by
子句中指定的排序的第一行。
答案 2 :(得分:0)
您可以尝试使用 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
答案 3 :(得分:0)
您应该有一列存储广告订单。无论是通过自动递增还是带有日期和时间的值。
例如:
autoIncrement | 产品 | 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