Hola a todos:
Olbeup, muchas gracias por tu código. La sentencia equivalente a TOP es FIRST. Aparte de eso, he tenido que hacerle alguna pequeña modificación para que el resultado fuera el deseado (según se ve en el ejemplo que adjunto ya que no asociaba bien el cliente con las lineas).
Creo que el código, por si a alguien le hace falta en el futuro sería este:
Código Delphi
[-]
SQL1 := 'SELECT L1.ARTICULO ,L1.DESCRIPCION ,L1.CODCLIENTE ,(SELECT MAX(FECHA) FROM Lineas WHERE ARTICULO = L1.ARTICULO AND CODCLIENTE = L1.CODCLIENTE) FECHA, ' +
'(SELECT FIRST 1 SERIE FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) SERIE, ' +
'(SELECT FIRST 1 PRECIOVENTA FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) PRECIOVENTA, ' +
'(SELECT FIRST 1 HORAGRABACION FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) HORAGRABACION, ' +
'(SELECT FIRST 1 DOCUMENTO FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) DOCUMENTO, ' +
'(SELECT FIRST 1 CANTIDAD FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) CANTIDAD ' +
' FROM Lineas AS L1 ' +
' WHERE L1.CODCLIENTE = ''' + Edit4.Text + ''' GROUP BY L1.ARTICULO, L1.DESCRIPCION, L1.CODCLIENTE';
if pFIBTransaction1.InTransaction then pFIBTransaction1.CommitRetaining;
pFIBTransaction1.StartTransaction;
LINEAS.Close;
LINEAS.SelectSQL.Clear;
LINEAS.SelectSQL.Add(SQL1);
LINEAS.QSelect.ExecQuery;
pFIBtransaction1.CommitRetaining;
LINEAS.Open;
Por tanto, si es que no me corregis, doy el tema a solucionado gracias a todas las aportaciones recibidas. Todas han sido muy importantes de una u otra manera, pero especialmente la de Olbeup.
Muchas gracias.