try:
delete from table where (lot_no,date) in (select lot_no,min(date) from table group by lot_no having count(*) > 1);
but caution:
- if both rows have the same date, both will be deleted
- if there are more than two rows with same lot_no, only that with the oldest date will be deleted
<edit> maybe this is a better solution:
delete from table a where exists ( select * from table b where a.lot_no = b.lot_no and a.date < b.date )
</edit>