2012-03-21 12 views
5

tengo que ir a buscar sólo el primer registro (porque necesito última fecha) del conjunto de resultados, en el momento tengo este conjunto de resultados de esta sql Tring:tomar sólo un registro de select

SELECT BCACC,FLDAT 
FROM ANAGEFLF 
ORDER BY FLDAT DESC 

y veo este registro :

A.M.T. AUTOTRASPORTI SRL  20080220 
A.M.T. AUTOTRASPORTI SRL  2008
A.M.T. AUTOTRASPORTI SRL  20070731 
APOFRUIT ITALIA     20080414 
APOFRUIT ITALIA     20080205 
APOFRUIT ITALIA     20071210 
APOFRUIT ITALIA     20070917 
APOFRUIT ITALIA     20070907 

ahora tengo que tomar sólo un registro (primera) para cada BCACC, me gustaría tener este conjunto de resultados:

A.M.T. AUTOTRASPORTI SRL  20080220 
APOFRUIT ITALIA     20080414 

acabo de intento grupo para BCACC pero recibo un error SQL, estoy trabajando en DB2 IBMi

Respuesta

2

suponiendo que son los únicos campos involucrados, puede simplemente hacer un GROUP BY.

SELECT 
    BCACC, 
    MAX(FLDAT) AS FLDAT 
FROM 
    ANAGEFLF 
GROUP BY 
    BCACC 

Si, sin embargo, tienen otros campos que usted necesita, entonces usted acaba de unirse a esta parte posterior de la mesa como una sub-consulta ...

SELECT 
    ANAGEFLF.* 
FROM 
    ANAGEFLF 
INNER JOIN 
(
    SELECT 
    BCACC, 
    MAX(FLDAT) AS FLDAT 
    FROM 
    ANAGEFLF 
    GROUP BY 
    BCACC 
) 
    AS map 
    ON map.BCACC = ANAGEFLF.BCACC 
    AND map.FLDAT = ANAGEFLF.FLDAT 
1
select BCACC, max(FLDAT) 
from ANAGEFLF 
group by BCACC 
0

La respuesta a la primera parte de su pregunta "Tengo que ir a buscar sólo el primer registro del conjunto de resultados" es:

SELECT BCACC,FLDAT 
FROM ANAGEFLF 
ORDER BY FLDAT DESC 
FETCH FIRST 1 ROW ONLY 

Pero la cuestión global fue otra, acerca de cómo solucionar una consulta para recuperar sólo los valores correctos.

+0

Deja de ser exigente con la gramática. Con base en el conjunto de entrada de ejemplo y el conjunto de resultados de ejemplo, es lo suficientemente claro en cuanto a lo que significaba el OP. – MatBailie

Cuestiones relacionadas