Maybe this stuff will be handy.
Code:
/* attachments from tickets with last post > then 3 months */
DELETE FROM swattachments WHERE ticketid IN (
SELECT ticketid
FROM (
SELECT
t.ticketid
,MAX(tp.dateline) AS dateline
FROM swtickets t INNER JOIN swticketposts tp ON t.ticketid=tp.ticketid
GROUP BY t.ticketid
) g
WHERE g.dateline < (UNIX_TIMESTAMP()-7776000)
)
/* now get rid of "hanging" rows in miscelaneous tables */
/* attachments */
DELETE FROM swattachments WHERE ticketid NOT IN (SELECT ticketid FROM swtickets)
/* attachments chunks */
DELETE FROM swattachmentchunks WHERE attachmentid NOT IN (SELECT attachmentid FROM swattachments)
/* tickets posts */
DELETE FROM swticketposts WHERE ticketid NOT IN (SELECT ticketid FROM swtickets)
/* tickets locks */
DELETE FROM swticketlocks WHERE ticketid NOT IN (SELECT ticketid FROM swtickets)
/* ticket message ids */
DELETE FROM swticketmessageids WHERE ticketpostid NOT IN (SELECT ticketpostid FROM swticketposts)
/* ticket posts index */
DELETE FROM swticketpostindex WHERE ticketpostid NOT IN (SELECT ticketpostid FROM swticketposts)
/* ticket words */
DELETE FROM swticketwords WHERE ticketwordid NOT IN (SELECT ticketwordid FROM swticketpostindex)
/* clear parser log */
delete from swparserlogs
delete from swparserlogdata
Let's see Kayako developers comments.