假设我有一张桌子:
SELECT * FROM table;
Ric Charge Date
VOD.L 2 20180601
VOD.L 5 20181002
VOD.L 4.5 20180212
RBS.L 3 20180504
RBS.L 6 20180708
如何按日期过滤,以便仅返回最近的费用 例如
Ric Charge Date
VOD.L 4.5 20180212
RBS.L 6 20180708
答案 0 :(得分:1)
我更喜欢简单的前1名
select top 1 * from t order by date desc
在编辑问题时,可以在示例输出错误的情况下使用相关的子查询
select * from t
where t.date in (select max(t1.date) from t t1
where t1.Ric=t.Ric
)
Ric Charge Date
VOD.L 5.000 02/10/2018 00:00:00
RBS.L 6.000 08/07/2018 00:00:
答案 1 :(得分:0)
类似
SELECT * FROM table WHERE date = (SELECT MAX(date) FROM table)
执行您要的操作(也在多个数据库中)。
Date是SQL中的关键字,并且列名很差。如果可以,请立即更改。如果不能,则可能需要根据您拥有的数据库对其进行引用
答案 2 :(得分:0)
按日期排序,然后使用LIMIT 1
仅获得一条记录。
SELECT *
FROM table
ORDER BY date DESC
LIMIT 1;
答案 3 :(得分:0)
具有不等式的自左联接将起作用:
SELECT t1.*
FROM
table t1
LEFT JOIN table t2 ON
t1.date < t2.date
WHERE
t2.date IS NULL
GROUP BY
t1.Ric
;
答案 4 :(得分:0)
我将row_number()
与tie子句配合使用:
select top (1) with ties t.*
from table t
order by row_number() over (partition by ric order by date desc);
如果日期确定,则可以使用dense_rank()
代替row_number()
。
答案 5 :(得分:0)
您可以使用诸如EXTRACTJSONFIELD
之类的窗口函数来创建一个带窗口的订单号,然后您只能提取行号= 1(最新日期)的记录:
ROW_NUMBER
结果:
根据您的问题,当更多行具有相同的Ric / date值时,不清楚会发生什么傻事
答案 6 :(得分:0)
或者,您可以使用不存在。
SELECT *
FROM TableA AS A
WHERE NOT EXISTS ( SELECT * FROM TableA AS A2
WHERE A.Ric = A2.Ric
AND A2.Date > A.Date )