我对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
列出了两次。我只需要maxdate记录(2008-01-07)以及每个唯一代码的代码,类型,日期和价格。所以基本上是每个唯一代码的最高记录。这个postgres所以我不能使用SELECT TOP或类似的东西。
我想我应该在主查询中使用它作为子查询,但我不确定如何。
之类的东西SELECT *
FROM price
JOIN (insert my original query here) AS price2 ON price.code = price2.code
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用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
(*)注意:我可能错误地为某些列添加了前缀,因为我不确定哪个列在哪个表中。我相信你可以解决这个问题。
答案 1 :(得分:0)
在Postgres中,您可以使用DISTINCT ON:
SELECT DISTINCT ON(code) *
FROM price
INNER JOIN parts ON price.code = part.code
WHERE price.type='01'
ORDER BY code, "date" DESC
答案 2 :(得分:0)
select distinct on (code)
code, p.type, p.date, p.price, p.file
from
price p
inner join
parts using (code)
where p.type='01'
order by code, p.date desc
http://www.postgresql.org/docs/current/static/sql-select.html#SQL-DISTINCT