could you try this?
Using JOIN
Data
mysql> select * from test;
+---------+------------+
| node_id | dt |
+---------+------------+
| 1 | 2011-03-01 |
| 1 | 2011-02-01 |
| 1 | 2011-01-01 |
+---------+------------+
3 rows in set (0.00 sec)
SELECT
SELECT *
FROM (
SELECT MAX(dt) AS max_dt
FROM test
WHERE node_id = 1
) x INNER JOIN test ON test.node_id = 1 AND test.dt < x.max_dt;
+------------+---------+------------+
| max_dt | node_id | dt |
+------------+---------+------------+
| 2011-03-01 | 1 | 2011-01-01 |
| 2011-03-01 | 1 | 2011-02-01 |
+------------+---------+------------+
DELETE
DELETE test
FROM (
SELECT MAX(dt) AS max_dt
FROM test
WHERE node_id = 1
) x INNER JOIN test ON test.node_id = 1 AND test.dt < x.max_dt;
Query OK, 2 rows affected (0.02 sec)
Check
mysql> select * from test;
+---------+------------+
| node_id | dt |
+---------+------------+
| 1 | 2011-03-01 |
+---------+------------+
1 row in set (0.00 sec)
Using Variable
In your case, you are trying to delete just one node_id. That makes simple query.
SELECT @max_dt := MAX(dt)
FROM test
WHERE node_id = 1;
+--------------------+
| @max_dt := MAX(dt) |
+--------------------+
| 2011-03-01 |
+--------------------+
DELETE FROM test
WHERE node_id = 1
AND dt < @max_dt;
Query OK, 2 rows affected (0.00 sec)
BTW
You asked 17 questions but hadn't accepted any answer. Are there no useful answers?