I came up with the logical opposite which I think does what you want
 
select a.id  from thi as a where a.id in (select thi.id from thi where 
a.userid=thi.userid order by timestamp limit 1000000 offset 10);
 
You just need to set the limit value to some ridiculous number.
 
Michael D. Black
Senior Scientist
Advanced Analytics Directorate
Northrop Grumman Information Systems
 

________________________________

From: sqlite-users-boun...@sqlite.org on behalf of Marcus Grimm
Sent: Mon 1/17/2011 10:24 AM
To: General Discussion of SQLite Database
Subject: EXTERNAL:Re: [sqlite] Help on DELETE FROM...




On 17.01.2011 17:14, Igor Tandetnik wrote:
> Marcus Grimm<mgr...@medcom-online.de>  wrote:
>> I have a table to record some history data, for example
>> items a user recently selected:
>>
>> CREATE TABLE THI(ID INTEGER PRIMARY KEY, TimeStamp INTEGER, UserID INTEGER, 
>> DataID INTEGER);
>>
>> That table needs to trace only the last 10 events, thus I would like
>> to remove entries from all users until each user has only 10 recent entries
>> in that table.
>>
>> I can delete for a specific user (42), using this:
>>
>> DELETE FROM THI WHERE
>>   (UserID=42) AND
>>   (ID NOT IN (SELECT ID FROM THI WHERE UserID=42 ORDER BY TimeStamp DESC 
>> LIMIT 10));
>>
>> But how do I do this for all users without using a surrounding loop
>> on application level ?
>
> delete from THI where ID not in (
>      select ID from THI t2 where t2.UserID = UserId
>      order by t2.TimeStamp desc limit 10);

Thanks Igor!
but a stupid question: Doesn't this basically remove
all entries from the table because of the "NOT IN" condition ?

Marcus

>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to