Competing solutions...gotta' love it...I prefer the postive solution as it's a 
list of what WILL be deleted.  Though there's some merit in "tell me what will 
be left".
 
delete from THI where ID in (
select t2.ID from THI t2 where t2.UserID=UserID 
order by t2.TimeStamp desc limit 1000000 offset 10);
 
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 11:18 AM
To: General Discussion of SQLite Database
Subject: EXTERNAL:Re: [sqlite] Help on DELETE FROM...




On 17.01.2011 17:26, Black, Michael (IS) wrote:
> 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.

ahh... nice trick!! Thank you!  ;)

Hm.. but how do I place that into a "DELETE FROM ..." statement ?
Here I can't use the alias syntax...




>
> 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

--
Marcus Grimm
MedCom GmbH Darmstadt, Rundeturmstr. 12, 64283 Darmstadt
Tel: +49(0)6151-95147-10
Fax: +49(0)6151-95147-20
web: www.medcom-online.de
--------------------------------------------------
MedCom slogans of the month:
"Vacation ? -- Every day at MedCom is a paid vacation!"
"Friday I have monday in my mind."
"MedCom -- Every week a vacation, every day an event, every hour a cliffhanger,
            every minute a climax."
"Damned, it's weekend again!"
_______________________________________________
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