我把这个放在桌子下面。

+_______+________+__________+________+
|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的行号。

07-26 09:42