Sql 博士后参加最长日期
我需要构造一个联接,该联接将为每个产品提供最新的价格。为了本例的目的,我大大简化了表结构,每个表的行数将以百万计。我以前在这方面的尝试并不十分有效Sql 博士后参加最长日期,sql,postgresql,inner-join,aggregate,Sql,Postgresql,Inner Join,Aggregate,我需要构造一个联接,该联接将为每个产品提供最新的价格。为了本例的目的,我大大简化了表结构,每个表的行数将以百万计。我以前在这方面的尝试并不十分有效 最简单的方法是使用行数功能 select p.name,t.amount as latest_price from (select p.*, row_number() over(partition by product_id order by create_date desc) as rn from prices p) t join
最简单的方法是使用
行数
功能
select p.name,t.amount as latest_price
from (select p.*, row_number() over(partition by product_id order by create_date desc) as rn
from prices p) t
join products p on p.id = t.product_id
where rn = 1
在PostgreSQL中,您可以尝试在降序
create\u date
order中仅获取每个产品id的第一行
SELECT DISTINCT ON (products.id) products.*, prices.*
FROM products
JOIN prices
ON products.id = prices.product_id
ORDER BY products.id, create_date DESC
(当然,除说明性目的外,您当然应该选择所需的确切列)问题是否是因为您在编写查询以获得正确结果时遇到问题?或者您在以高效的方式编写查询时遇到了问题?@MarkHildreth只要数据集很小,我就可以整天编写“运行”查询。一旦我尝试在我的大型数据库上运行这些相同的子查询联接,它就永远不会返回结果。所以,是的,问题肯定是效率。@bopritchard在这种情况下,您应该提供更多信息。至少,您应该给出一个您尝试运行的查询,以及对结果的解释。您试图运行的表的模式和索引列表也将很有用。我还建议在表上运行分析/真空,然后再次尝试您的查询;非常感谢。