近期项目用到了类似oracle的分析函数over partition by功能,但是我们用的数据库是sqllite,并不支持分析函数。
So ……
明确需求
我们需要取所有数据,如果某一字段有重复从字段重复数据内取一条时间最近接近现在时间的.
- (假设id重复)
- (假设存时间的字段为dtime)
- (假设表明为tableName)
在oracle内实现:
select * from (
select a.*,
row_number() over(partition by id order by dtime desc) rn
from tableName
)
where rn =1;
类似的功能在没有分析函数的数据库:
select *,
(select count(1) from tableName b where id=b.id and dtime<b.dtime ) rn
from tableName
where rn=0