obtener ultimo precio

12/09/2008 - 15:55 por mp | Informe spam
Señores, necesito na sentencia sql que me devuelva el ultimo precio de venta
de un articulo,
(la ultima vez que se vendio).
Con la sentencia que expongo mas abajo obtengo linea repetidas de articulos
segun entiendo que es debido
al group by. El mismo articulo con precios y fechas distintas.
Necesito solo obtener la ultima vez que se vendio.
Que le falta a la consulta ????

Gracias por la ayuda

MP

select codiarti, max(fecdoc) as fecha,pventa1
from docventa
where td in('FC','BL')
group by codiarti,pventa1

Preguntas similare

Leer las respuestas

#1 Rubén Garrigós
12/09/2008 - 16:32 | Informe spam
¿Que versión de SQL Server estás utilizando? ¿Lo que deseas obtener es el
último precio de un artículo o el último precio de todos los artículos?

Si es el primer caso, como parece indicar lo que dices ("último precio de
venta de un artículo"), puedes sacarlo simplemente con un "select top 1
pventa from
docventa where codiarti=X order by fecha desc".

Rubén Garrigós
Solid Quality Mentors

"mp" wrote:

Señores, necesito na sentencia sql que me devuelva el ultimo precio de venta
de un articulo,
(la ultima vez que se vendio).
Con la sentencia que expongo mas abajo obtengo linea repetidas de articulos
segun entiendo que es debido
al group by. El mismo articulo con precios y fechas distintas.
Necesito solo obtener la ultima vez que se vendio.
Que le falta a la consulta ????

Gracias por la ayuda

MP

select codiarti, max(fecdoc) as fecha,pventa1
from docventa
where td in('FC','BL')
group by codiarti,pventa1



Respuesta Responder a este mensaje
#2 Alejandro Mesa
12/09/2008 - 16:37 | Informe spam
- Este campo fecha incluye timpo?
- Puede haberse vendido el mismo producto multiples veces en el mismo tiempo?
- Cual version de SQL Server usas?

; with r_set
as
(
select
codiarti, fecdoc, pventa1,
row_number() over(partition by codiarti order by fecdoc DESC) as rn
from docventa
where td in('FC','BL')
)
select *
from r_set
where rn = 1;
GO


AMB



"mp" wrote:

Señores, necesito na sentencia sql que me devuelva el ultimo precio de venta
de un articulo,
(la ultima vez que se vendio).
Con la sentencia que expongo mas abajo obtengo linea repetidas de articulos
segun entiendo que es debido
al group by. El mismo articulo con precios y fechas distintas.
Necesito solo obtener la ultima vez que se vendio.
Que le falta a la consulta ????

Gracias por la ayuda

MP

select codiarti, max(fecdoc) as fecha,pventa1
from docventa
where td in('FC','BL')
group by codiarti,pventa1



Respuesta Responder a este mensaje
#3 mp
12/09/2008 - 17:08 | Informe spam
Gracias señores por responder.
Estamos usando SQLServer 2000 SP4.
Efectivamente necesito el ultimo precio de venta de todos los articulos.
El campo fecha incluye tiempo y como ya dije, con la sentencia que les
mostre en post anterior en algunos casos me muestra varios ya que el group
by muestra cuando un
articulo se vendio con distinto precio.(segun entiendo)

MP

"Alejandro Mesa" escribió en el
mensaje news:
- Este campo fecha incluye timpo?
- Puede haberse vendido el mismo producto multiples veces en el mismo
tiempo?
- Cual version de SQL Server usas?

; with r_set
as
(
select
codiarti, fecdoc, pventa1,
row_number() over(partition by codiarti order by fecdoc DESC) as rn
from docventa
where td in('FC','BL')
)
select *
from r_set
where rn = 1;
GO


AMB



"mp" wrote:

Señores, necesito na sentencia sql que me devuelva el ultimo precio de
venta
de un articulo,
(la ultima vez que se vendio).
Con la sentencia que expongo mas abajo obtengo linea repetidas de
articulos
segun entiendo que es debido
al group by. El mismo articulo con precios y fechas distintas.
Necesito solo obtener la ultima vez que se vendio.
Que le falta a la consulta ????

Gracias por la ayuda

MP

select codiarti, max(fecdoc) as fecha,pventa1
from docventa
where td in('FC','BL')
group by codiarti,pventa1



Respuesta Responder a este mensaje
#4 Alejandro Mesa
12/09/2008 - 17:43 | Informe spam
Pudieras tratar usando:

SELECT
codiarti, fecdoc, pventa1
FROM
docventa AS dv
WHERE
td in('FC','BL')
AND fecdoc = (
SELECT MAX(d.fecdoc)
FROM docventa AS d
WHERE d.codiarti = dv.codiarti AND d.td = dv.td
GROUP BY d.codiarti
)
GO

Si el articulo se vendio multiples veces en el mismo tiempo, entonces la
sentencia anterior puede retornar multiples filas para un mismo valor de
[codiarti], en cuyo caso tendremos que usar algun otro mecanismo para romper
el empate. Pudieramos usar la columna [pventa1] para romper el empate, en
caso de haber, pero para hacerlo mas simple voy a usar una tabla temporal con
una clave ? (surrogate).

create table #t(
sk int not null identity(1, 1) unique clustered,
codiarti varchar(15) not null,
fecdoc datetime not null,
pventa1 money
)

insert into #t(codiarti, fecdoc, pventa1)
SELECT
codiarti, fecdoc, pventa1
FROM
docventa AS dv
WHERE
td in('FC','BL')
AND fecdoc = (
SELECT MAX(d.fecdoc)
FROM docventa AS d
WHERE d.codiarti = dv.codiarti AND d.td = dv.td
GROUP BY d.codiarti
)

select
*
from
(
select
codiarti, fecdoc, pventa1,
(
select count(*)
from #t as b
where b.codiarti = a.codiarti and b.sk <= a.sk
) as rnk
from #t as a
) as t
where
rnk = 1

drop table #t
GO


AMB


"mp" wrote:

Gracias señores por responder.
Estamos usando SQLServer 2000 SP4.
Efectivamente necesito el ultimo precio de venta de todos los articulos.
El campo fecha incluye tiempo y como ya dije, con la sentencia que les
mostre en post anterior en algunos casos me muestra varios ya que el group
by muestra cuando un
articulo se vendio con distinto precio.(segun entiendo)

MP

"Alejandro Mesa" escribió en el
mensaje news:
>- Este campo fecha incluye timpo?
> - Puede haberse vendido el mismo producto multiples veces en el mismo
> tiempo?
> - Cual version de SQL Server usas?
>
> ; with r_set
> as
> (
> select
> codiarti, fecdoc, pventa1,
> row_number() over(partition by codiarti order by fecdoc DESC) as rn
> from docventa
> where td in('FC','BL')
> )
> select *
> from r_set
> where rn = 1;
> GO
>
>
> AMB
>
>
>
> "mp" wrote:
>
>> Señores, necesito na sentencia sql que me devuelva el ultimo precio de
>> venta
>> de un articulo,
>> (la ultima vez que se vendio).
>> Con la sentencia que expongo mas abajo obtengo linea repetidas de
>> articulos
>> segun entiendo que es debido
>> al group by. El mismo articulo con precios y fechas distintas.
>> Necesito solo obtener la ultima vez que se vendio.
>> Que le falta a la consulta ????
>>
>> Gracias por la ayuda
>>
>> MP
>>
>> select codiarti, max(fecdoc) as fecha,pventa1
>> from docventa
>> where td in('FC','BL')
>> group by codiarti,pventa1
>>
>>
>>



Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
12/09/2008 - 18:09 | Informe spam
Hola Alejandro,

On 12 sep, 17:43, Alejandro Mesa
wrote:
Pudieras tratar usando:

SELECT
        codiarti, fecdoc, pventa1
FROM
        docventa AS dv
WHERE
        td in('FC','BL')
        AND fecdoc = (
        SELECT MAX(d.fecdoc)
        FROM docventa AS d
        WHERE d.codiarti = dv.codiarti AND d.td = dv.td
        GROUP BY d.codiarti
        )



Cuidado con la subconsulta Alejandro!

SELECT
codiarti, fecdoc, pventa1
FROM
docventa AS dv
WHERE
td in ('FC','BL')
AND fecdoc = (
SELECT MAX(d.fecdoc)
FROM docventa AS d
WHERE d.codiarti = dv.codiarti AND d.td in ('FC','BL')
)

Eso si he entendido bien, claro!

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida