Consulta Query

03/11/2005 - 19:01 por Silgol | Informe spam
Tengo el siguiente query

SELECT dbo.ITEMSACUM.CODITM, dbo.ITEMSACUM.STKACTUAL,
dbo.VALORIZACION_CPP.fec_costo,
dbo.VALORIZACION_CPP.COSTO_ACTUAL
FROM dbo.ITEMSACUM Inner JOIN
dbo.VALORIZACION_CPP ON
dbo.ITEMSACUM.CODITM = dbo.VALORIZACION_CPP.coditm
WHERE (dbo.ITEMSACUM.CODITM = '00001' or dbo.ITEMSACUM.CODITM = '00002')

Me devuelve varias filas de cada código y yo sólo necesito la última de cada
uno

00001 310.00000 2004-07-05 00:00:00.000
3.31751
00001 310.00000 2004-07-05 00:00:00.000
3.31751
00001 310.00000 2004-07-05 00:00:00.000
3.31751
00001 310.00000 2004-07-05 00:00:00.000
3.31751
00002 697.00000 2004-02-26 00:00:00.000
4.42949
00002 695.00000 2004-02-26 00:00:00.000
4.42949


, pero no tengo manera de diferenciarlos porque pueden ser de la misma fecha.
Sólo necesito el último registro de cada uno.

Preguntas similare

Leer las respuestas

#6 Silgol
04/11/2005 - 15:37 | Informe spam
El tema es que esa tabla está en un soft de gestión de una empresa, no puedo
alterar la tabla...

"Alejandro Mesa" escribió:

Silgol,

> La tabla en cuestión no tiene definida una clave primaria, al menos es lo
> que veo.

Pudieramos usar una columna identity (subrrogate key) por el momento.

alter table dbo.VALORIZACION_CPP
add c1 int not null identity constraint uq_VALORIZACION_CPP_c1 unique

SELECT dbo.ITEMSACUM.CODITM, dbo.ITEMSACUM.STKACTUAL,
dbo.VALORIZACION_CPP.fec_costo,
dbo.VALORIZACION_CPP.COSTO_ACTUAL
FROM dbo.ITEMSACUM Inner JOIN
dbo.VALORIZACION_CPP ON
dbo.ITEMSACUM.CODITM = dbo.VALORIZACION_CPP.coditm
WHERE (dbo.ITEMSACUM.CODITM = '00001' or dbo.ITEMSACUM.CODITM = '00002')
and dbo.VALORIZACION_CPP.c1 = (select max(a.c1) from
dbo.VALORIZACION_CPP.fec_costo as a where a.CODITM = dbo.ITEMSACUM.CODITM)

alter table dbo.VALORIZACION_CPP
drop constraint uq_VALORIZACION_CPP_c1

alter table dbo.VALORIZACION_CPP
drop column c1
go


AMB

"Silgol" wrote:

> Alejandro:
> La tabla en cuestión no tiene definida una clave primaria, al menos es lo
> que veo.
>
>
> "Alejandro Mesa" escribió:
>
> > Silgol,
> >
> > > Es el problema principal. Los registros vienen ordenados por coditm y fecha y
> > > yo necesito el último de cada fecha. Lo identificaría cuando el campo coditm
> > > cambió.
> > >
> >
> > Creo que ese criterio no es suficiente. Alguien que esta viendo la data
> > puede identificar la ultima fila del grupo, pero ese criterio debe pasarsele
> > a sql server y el no tiene ojos. SQL Server esta orientado a grupos o
> > conjuntos y no al procesamiento fila a fila. Cuando seleccionamos dato usando
> > la sentencia select, debe usarse la clausula "order by" para darle un orden
> > al resultado, sin ese criterio entonces no podemos hablar de primero o ultimo.
> >
> > Veamos un ejemplo usando la bd northwind. Supongamos que queremos
> > seleccionar la ultima orden por cliente, entonces:
> >
> > use northwind
> > go
> >
> > select *
> > from dbo.orders a
> > where orderdate = (select max(b.orderdate) from dbo.orders as b where
> > b.customerid = a.customerid)
> > go
> >
> > Si algun cliente puso mas de una orden al mismo tiempo, entonces tenemos que
> > usar otro criterio para identificar la ultima orden. Si te fijas en la
> > estructura de la tabla "orders", veras que la pk es una columna identity, lo
> > cual significa que la ultima orden sera la que tiene el mas alto valor de
> > "orderid".
> >
> > select *
> > from dbo.orders as a
> > where orderid = (select max(b.orderid) from dbo.orders as b where
> > b.customerid = a.customerid)
> >
> > Este es el tipo de criterio que necesitamos para identificar una fila como
> > la ultima de un grupo especifico.
> >
> >
> > AMB
> >
> > AMB
> >
> > "Silgol" wrote:
> >
> > > Es el problema principal. Los registros vienen ordenados por coditm y fecha y
> > > yo necesito el último de cada fecha. Lo identificaría cuando el campo coditm
> > > cambió.
> > >
> > > "Alejandro Mesa" escribió:
> > >
> > > > Silgo,
> > > >
> > > > Que criterio podemos usar para identificar la ultima fila?
> > > >
> > > > 00001 310.00000 2004-07-05 00:00:00.000 3.31751
> > > > 00001 310.00000 2004-07-05 00:00:00.000 3.31751
> > > > 00001 310.00000 2004-07-05 00:00:00.000 3.31751
> > > > 00001 310.00000 2004-07-05 00:00:00.000 3.31751
> > > >
> > > >
> > > > AMB
> > > >
> > > > "Silgol" wrote:
> > > >
> > > > > Tengo el siguiente query
> > > > >
> > > > > SELECT dbo.ITEMSACUM.CODITM, dbo.ITEMSACUM.STKACTUAL,
> > > > > dbo.VALORIZACION_CPP.fec_costo,
> > > > > dbo.VALORIZACION_CPP.COSTO_ACTUAL
> > > > > FROM dbo.ITEMSACUM Inner JOIN
> > > > > dbo.VALORIZACION_CPP ON
> > > > > dbo.ITEMSACUM.CODITM = dbo.VALORIZACION_CPP.coditm
> > > > > WHERE (dbo.ITEMSACUM.CODITM = '00001' or dbo.ITEMSACUM.CODITM = '00002')
> > > > >
> > > > > Me devuelve varias filas de cada código y yo sólo necesito la última de cada
> > > > > uno
> > > > >
> > > > > 00001 310.00000 2004-07-05 00:00:00.000
> > > > > 3.31751
> > > > > 00001 310.00000 2004-07-05 00:00:00.000
> > > > > 3.31751
> > > > > 00001 310.00000 2004-07-05 00:00:00.000
> > > > > 3.31751
> > > > > 00001 310.00000 2004-07-05 00:00:00.000
> > > > > 3.31751
> > > > > 00002 697.00000 2004-02-26 00:00:00.000
> > > > > 4.42949
> > > > > 00002 695.00000 2004-02-26 00:00:00.000
> > > > > 4.42949
> > > > >
> > > > >
> > > > > , pero no tengo manera de diferenciarlos porque pueden ser de la misma fecha.
> > > > > Sólo necesito el último registro de cada uno.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida