Postgresql 为postgres中的每个用户选择项目的最后一个

Postgresql 为postgres中的每个用户选择项目的最后一个,postgresql,Postgresql,我想获取每个用户的最后一个条目,但是customer_id是一个散列'ASAG#…'order by customer_id销毁查询。还有别的选择吗 Select Distinct On (l.customer_id) l.customer_id ,l.created_at ,l.text From likes l Order By l.customer_id, l.created_at Desc 您当前的查询似乎已在运行,请注意: 我不知道为什么您当前的查询没有生

我想获取每个用户的最后一个条目,但是customer_id是一个散列'ASAG#…'order by customer_id销毁查询。还有别的选择吗

Select Distinct On (l.customer_id)
     l.customer_id
    ,l.created_at
    ,l.text
From likes l
Order By l.customer_id, l.created_at Desc

您当前的查询似乎已在运行,请注意:

我不知道为什么您当前的查询没有生成您期望的结果。根据您的
orderby
语句,它应该为每个客户返回一条不同的记录,对应于最近的一条记录

在任何情况下,如果它不能满足您的需要,另一种方法是在这里使用
ROW_NUMBER()
和用户分区。内部查询为每个用户分配一个行号,值
1
将转到每个用户的最新记录。然后外部查询只保留最新的记录

SELECT
    t.customer_id,
    t.created_at,
    t.text
FROM
(
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) rn
    FROM likes
) t
WHERE t.rn = 1
要加快使用
ROW\u NUMBER()
的内部查询,您可以尝试在
customer\u id
created\u的
列上添加一个复合索引:

CREATE INDEX yourIdx ON likes (customer_id, created_at);

您当前的查询似乎已在运行,请注意:

我不知道为什么您当前的查询没有生成您期望的结果。根据您的
orderby
语句,它应该为每个客户返回一条不同的记录,对应于最近的一条记录

在任何情况下,如果它不能满足您的需要,另一种方法是在这里使用
ROW_NUMBER()
和用户分区。内部查询为每个用户分配一个行号,值
1
将转到每个用户的最新记录。然后外部查询只保留最新的记录

SELECT
    t.customer_id,
    t.created_at,
    t.text
FROM
(
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) rn
    FROM likes
) t
WHERE t.rn = 1
要加快使用
ROW\u NUMBER()
的内部查询,您可以尝试在
customer\u id
created\u的
列上添加一个复合索引:

CREATE INDEX yourIdx ON likes (customer_id, created_at);

是的,这很好。有没有加快速度的建议?现在大约需要30秒。尝试在
customer\u id
created\u at
上添加一个复合索引。是的,这很好。有没有加快速度的建议?现在大约需要30秒。请尝试在
customer\u id
created\u at
上添加一个复合索引。