sqlite相当于row_number()over(partition by …?

前端之家收集整理的这篇文章主要介绍了sqlite相当于row_number()over(partition by …?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否可以使用单个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)

猜你在找的Sqlite相关文章