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

#1 Alejandro Mesa
03/11/2005 - 19:56 | Informe spam
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.
Respuesta Responder a este mensaje
#2 Silgol
03/11/2005 - 20:12 | Informe spam
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.
Respuesta Responder a este mensaje
#3 Alejandro Mesa
03/11/2005 - 21:36 | Informe spam
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.
Respuesta Responder a este mensaje
#4 Silgol
04/11/2005 - 13:04 | Informe spam
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.
Respuesta Responder a este mensaje
#5 Alejandro Mesa
04/11/2005 - 14:56 | Informe spam
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.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida