sqlite相当于row_number()over(partition by …?
发布时间:2020-12-12 19:11:46 所属栏目:百科 来源:网络整理
导读:我想知道是否可以使用单个sqlite语句进行以下操作: 我的桌子看起来像这样: |AnId|UserId|SomeDate|SomeData||123 |A |1/1/2010|aadsljvs|| 87 |A |2/9/2010|asda fas||193 |A |2/4/2010|aadsljvs||927 |A |7/3/2010|aadsasdf||816 |B |1/1/2010|aa32973v||
我想知道是否可以使用单个sqlite语句进行以下操作:
我的桌子看起来像这样: |AnId|UserId|SomeDate|SomeData| |123 |A |1/1/2010|aadsljvs| | 87 |A |2/9/2010|asda fas| |193 |A |2/4/2010|aadsljvs| |927 |A |7/3/2010|aadsasdf| |816 |B |1/1/2010|aa32973v| |109 |B |7/5/2010|aaasfd10| | 39 |B |1/3/2010|66699327| ... 每一行都有一个唯一的id,一个用户id,一个datetime值和一些其他数据. 我想删除记录,所以我保留每个用户最新的10条记录,基于SomeDate. 在sql server中,我会使用这样的东西: delete d from data d inner join ( select UserId,AnId,row_number() over ( partition by UserId order by SomeDate desc ) as RowNum from data ) ranked on d.AnId = ranked.AnId where ranked.RowNum > 10 有没有办法在sqlite这样做?具有相同SomeDate的几个记录的边缘情况不是特别的担心,例如如果我保留所有那些记录,那会好的. 我知道这个问题是旧的,但是下面的SQLite语句将会在一个语句中执行Rory最初的要求 – 删除给定UserId的所有记录,而不是该UserId的10个最近的记录(基于SomeDate).DELETE FROM data WHERE AnId IN (SELECT AnId FROM data AS d WHERE d.UserId = data.UserId ORDER BY SomeDate DESC LIMIT -1 OFFSET 10) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |