我想知道是否可以使用单个sqlite语句进行以下操作:
@H_403_18@
我知道这个问题是旧的,但是下面的sqlite语句将会在一个语句中执行Rory最初的要求 – 删除给定UserId的所有记录,而不是该UserId的10个最近的记录(基于SomeDate).
我的桌子看起来像这样:
|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的几个记录的边缘情况不是特别的担心,例如如果我保留所有那些记录,那会好的.
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)