sql - 从子查询搜索结果中选择记录 (postgres)

标签 sql postgresql

我查询了 2 个表(零件、价格)。此查询的简化版本是:

SELECT price.* 
FROM price 
INNER JOIN parts ON (price.code = part.code ) 
WHERE price.type = '01' 
ORDER BY date DESC

返回几条记录:

 code        | type     | date                | price      |  file
-------------+----------+------------------------------------------------------
 00065064705 | 01       | 2008-01-07 00:00:00 |  16.400000 | 28SEP2011.zip
 00065064705 | 01       | 2007-02-05 00:00:00 |  15.200000 | 20JUL2011.zip
 54868278900 | 01       | 2006-02-24 00:00:00 |  16.642000 | 28SEP2011.zip

如您所见,代码 00065064705 列出了两次。我只需要最大日期记录 (2008-01-07) 以及每个唯一代码的代码、类型、日期和价格。所以基本上每个唯一代码的最高记录。这个 postgres 所以我不能使用 SELECT TOP 或类似的东西。

我认为我应该将其用作主查询中的子查询,但我不确定如何使用。类似

SELECT * 
FROM price 
JOIN (insert my original query here) AS price2 ON price.code = price2.code

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用 row_number() 窗口函数来执行此操作。

select *
  from (SELECT price.*,
               row_number() over (partition by price.code order by price.date desc) as rn
          FROM price
         INNER JOIN parts ON (price.code = part.code ) 
         WHERE price.type='01') x
 where rn = 1
 ORDER BY date DESC

(*) 注意:我可能错误地为某些列添加了前缀,因为我不确定哪个列在哪个表中。我相信您可以解决这个问题。

关于sql - 从子查询搜索结果中选择记录 (postgres),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32891811/

相关文章:

php - 将所有 INSERT 语句合并为一个

sql - SQL Server 中是否有像 .NET 中的 Math.Max 一样接受两个值的 Max 函数?

php - 使用 PHP 和 MySQL 编辑表单 : Best way to obtain an ID

postgresql - 如何在 CentOS 6.7 的 postgresql 9.5 中安装 plv8?

php - 列出 1 行而不是 php 中的所有行

mysql - 如何在mysql中获取有序查询

postgresql - 最短路径在 pgrouting 中如何工作?

sql - Money 数据类型的平均值

sql - 将 LIMIT 添加到 ARRAY_TO_JSON 或 ARRAY_AGG

sql - 仅选择表中每个标识符的最新值