我有下表。
+_______+________+__________+________+
|Playid |billid| amount | Date |
+_______+________+__________+________+
|123 | 345 | 144.9 | 2015-09|
|123 | 456 | 200 | 2015-10|
+_______+________+__________+________+
我需要编写一个查询,以便仅显示最近交易日期(日期)的账单金额,如下所示。
+_______+________+__________+________+
|Playid |billid| amount | Date |
+_______+________+__________+________+
|123 | 456 | 200 | 2015-10|
+_______+________+__________+________+
请帮我怎么做。
答案 0 :(得分:1)
MAX(Date)
和最近的日期,可以使用 playid
。
然而,您要尝试执行的操作的问题是您要显示所有列。这就是排名功能发挥作用的地方。在这种情况下,您可以像这样使用row_number
function:
SELECT PlayId, billid, amount, date
FROM
(
SELECT
PlayId, billid, amount, date,
row_number() over(partition by playid order by date dec) as rn
FROM tablename
) t
where rn = 1
row_number() over(partition by playid order by date dec)
会为每组playid
提供排名,第一组(最低的)将是最近日期的排名。然后你只需要过滤等于1的行号。
答案 1 :(得分:1)
Postgres提供distinct on
。这样写起来更简单,并且通常具有最佳性能:
select distinct on (playid) t.*
from t
order by playid, order by date desc;