我想知道是否可以使用单个 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、一个日期时间值和一些其他数据。
我想删除记录,以便保留最新 10 条记录per user,基于 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)