Sigo sin entenderte del todo, no sé si me he aclarado o me he confundido más.
Suponiendo que sea lo que yo he entendido. Tienes tres campo "fecha" y te interesa ordenar por la fecha (cualquiera de las tres) más baja
Código Delphi
[-]
q.SQL.Add('SELECT [campos], FECHA');
q.SQL.Add('FROM (');
q.SQL.Add(' SELECT [campos], FRAS_CONF1_DATA AS FECHA');
q.SQL.Add(' FROM FRAS');
q.SQL.Add(' WHERE FRAS_CONF1_DATA < FRAS_CONF2_DATA');
q.SQL.Add(' AND FRAS_CONF1_DATA < FRAS_CONF3_DATA');
q.SQL.Add(' UNION');
q.SQL.Add(' SELECT [campos], FRAS_CONF2_DATA as fecha');
q.SQL.Add(' FROM FRAS');
q.SQL.Add(' WHERE FRAS_CONF2_DATA < FRAS_CONF1_DATA');
q.SQL.Add(' AND FRAS_CONF2_DATA < FRAS_CONF3_DATA');
q.SQL.Add(' UNION');
q.SQL.Add(' SELECT [campos], FRAS_CONF3_DATA as fecha');
q.SQL.Add(' FROM FRAS');
q.SQL.Add(' WHERE FRAS_CONF3_DATA < FRAS_CONF1_DATA');
q.SQL.Add(' AND FRAS_CONF3_DATA < FRAS_CONF3_DATA');
q.SQL.Add(' UNION');
q.SQL.Add(' SELECT [campos], FRAS_CONF1_DATA as fecha');
q.SQL.Add(' FROM FRAS');
q.SQL.Add(' WHERE FRAS_CONF1_DATA = FRAS_CONF2_DATA');
q.SQL.Add(' AND FRAS_CONF1_DATA < FRAS_CONF3_DATA');
q.SQL.Add(' UNION');
q.SQL.Add(' SELECT [campos], FRAS_CONF1_DATA as fecha');
q.SQL.Add(' FROM FRAS');
q.SQL.Add(' WHERE FRAS_CONF1_DATA = FRAS_CONF3_DATA');
q.SQL.Add(' AND FRAS_CONF1_DATA < FRAS_CONF2_DATA');
q.SQL.Add(' UNION');
q.SQL.Add(' SELECT [campos], FRAS_CONF2_DATA as fecha');
q.SQL.Add(' FROM FRAS');
q.SQL.Add(' WHERE FRAS_CONF2_DATA = FRAS_CONF3_DATA');
q.SQL.Add(' AND FRAS_CONF2_DATA < FRAS_CONF1_DATA');
q.SQL.Add(')');
q.SQL.Add('CAST(FECHA AS DATE) > ' +#39 + FormatDateTime('mm/dd/yyyy',now()-30)+#39);
q.SQL.Add('ORDER BY FECHA');