加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读