Postgresql 为postgres中的每个用户选择项目的最后一个
我想获取每个用户的最后一个条目,但是customer_id是一个散列'ASAG#…'order by customer_id销毁查询。还有别的选择吗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 您当前的查询似乎已在运行,请注意: 我不知道为什么您当前的查询没有生
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
上添加一个复合索引。