我把这个放在桌子下面。
+_______+________+__________+________+
|Playid |billid| amount | Date |
+_______+________+__________+________+
|123 | 345 | 144.9 | 2015-09|
|123 | 456 | 200 | 2015-10|
+_______+________+__________+________+
我需要编写一个查询,以便仅显示具有如下最近交易日期(日期)的票据金额。
+_______+________+__________+________+
|Playid |billid| amount | Date |
+_______+________+__________+________+
|123 | 456 | 200 | 2015-10|
+_______+________+__________+________+
请帮我怎么做。
最佳答案
如果只想显示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的行号。