You cannot specify offset in DELETE's LIMIT clause.

So the only way to do that is to rewrite your query to something like:

DELETE FROM `chat_messages` WHERE id IN (select id from (select id
                                           FROM `chat_messages`
                                       ORDER BY `timestamp` DESC
                                          LIMIT 20, 50) x)


Supposing that you have primary key id column

UPD: you need to implement double nesting to fool mysql, since it doesn't allow to select from currently modified table (thanks to Martin Smith)

Mysql delete statement with limit
I am a competent C++ developer.  I understand and use polymorphism, templates, the STL, and I have a solid grasp of how streams work.  For all practical purposes, I've done no Java development.  I'm sure some of you were in a similar situation at one point when you had to learn Java.  How long did it take you to become a competent Java programmer?  
