Rupert Stokoe <[EMAIL PROTECTED]> wrote:
>
> I'm having problems trying to construct a delete query
> from a table. Below is a scaled down version of the
> table
>
> host user date id
> -----------------------------
> mars john 27-6 1
> pluto dave 27-6 2
> venus jane 27-6 3
> mars john 28-6 4
> saturn tom 28-6 5
> pluto dave 29-6 6
>
>
> What I want to do is purge old records for each host
> from the table. If I use the query:
>
> SELECT max(date), host FROM table GROUP BY host;
>
> Then I can get the latest record produced for each
> host. There are never two records for a host produced
> on the same date. So basically I want to remove all
> records *other than* the latest records. If MySQL
> supported sub queries then this would be easy:
>
> DELETE from table where id not in (SELECT max(date)
> FROM table GROUP BY host)
>
> Is this something I'm just going to have to do client
> side? I figured I could run the query above to get all
> id's of records to keep and then form a long string of
> them i.e.
>
> keepString = "(1, 4, 7, 9, 12, 15, 17 etc.)"
>
> and then run ("DELETE FROM table WHERE date NOT IN" +
> keepString) .
>
> This seems a bit messy tho, and keepstring would
> contain over 100 id's if used.
If you use 4.0.x you can retrieve max date into temporary table and then use DELETE
with LEFT JOIN to remove records.
--
For technical support contracts, goto https://order.mysql.com/?ref=ensita
This email is sponsored by Ensita.net http://www.ensita.net/
__ ___ ___ ____ __
/ |/ /_ __/ __/ __ \/ / Egor Egorov
/ /|_/ / // /\ \/ /_/ / /__ [EMAIL PROTECTED]
/_/ /_/\_, /___/\___\_\___/ MySQL AB / Ensita.net
<___/ www.mysql.com
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]