Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-11-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Como obtener equivalente de Last en Firebird

Tengo este SQL en Firebird 2.5, y me piden añadir el último precio, pero observo que no existe la instrucción Last.

Código Delphi [-]
procedure TfrPcons1Cli.btAceptarClick(Sender: TObject);
begin
IbDtsV.Close;
IbDtsV.SelectSQL.Clear;
IbDtsV.SelectSQL.Add('Select Max(Codclient) as Codclient, Max(Fecha) as Fecha, ');
IbDtsV.SelectSQL.Add('Producto, Sum(Unidades) as Unidades,');
IbDtsV.SelectSQL.Add('Max(Precio) as Precio, Sum(Subtotal) as Subtotal, ');
IbDtsV.SelectSQL.Add('Avg(Precio) as PMedio, Min(Precio) as MPrecio');
IbDtsV.SelectSQL.Add('from LineasVentas');
IbDtsV.SelectSQL.Add('Where Codclient = :C');
IbDtsV.SelectSQL.Add('And Fecha between :F1 and :F2');
IbDtsV.SelectSQL.Add('Group By Producto');
IbDtsV.SelectSQL.Add('Having Sum(Unidades) <> 0');
IbDtsV.SelectSQL.Add('Order by Producto');

IbDtsV.ParamByName('C').AsString:=IbDTSCliCodigo.Value;
IbDtsV.ParamByName('F1').AsDate:=DateOf(DtpkIni.Date);
IbDtsV.ParamByName('F2').AsDate:=DateOf(DtpkFin.Date);
IbDtsV.open;
end;

Quisiera:
Código Delphi [-]
procedure TfrPcons1Cli.btAceptarClick(Sender: TObject);
begin
IbDtsV.Close;
IbDtsV.SelectSQL.Clear;
IbDtsV.SelectSQL.Add('Select Max(Codclient) as Codclient, Max(Fecha) as Fecha, ');
IbDtsV.SelectSQL.Add('Producto, Sum(Unidades) as Unidades,');
IbDtsV.SelectSQL.Add('Max(Precio) as Precio, Sum(Subtotal) as Subtotal, ');
IbDtsV.SelectSQL.Add('Avg(Precio) as PMedio, Min(Precio) as MPrecio,');
IbDtsV.SelectSQL.Add('Last(Precio) as UltimoP');
IbDtsV.SelectSQL.Add('from LineasVentas');
IbDtsV.SelectSQL.Add('Where Codclient = :C');
IbDtsV.SelectSQL.Add('And Fecha between :F1 and :F2');
IbDtsV.SelectSQL.Add('Group By Producto');
IbDtsV.SelectSQL.Add('Having Sum(Unidades) <> 0');
IbDtsV.SelectSQL.Add('Order by Producto');

IbDtsV.ParamByName('C').AsString:=IbDTSCliCodigo.Value;
IbDtsV.ParamByName('F1').AsDate:=DateOf(DtpkIni.Date);
IbDtsV.ParamByName('F2').AsDate:=DateOf(DtpkFin.Date);
IbDtsV.open;
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #2  
Antiguo 30-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
'Last' es ir al último registro en un dataset.
¿A qué te refieres exactamente con último precio?, ¿el último precio al que se le vendió a un cliente?, para eso tendrás que buscar su última factura donde está el artículo que buscas y extraer de ahí el precio del artículo, no creo que exista eso de 'Last' para lo que pretendes hacer.
Responder Con Cita
  #3  
Antiguo 30-11-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Ésta instrucción existe por ejemplo en Access.

Código Delphi [-]
SELECT Diario.SUBCTA, Sum(Diario.EURODEBE) AS SumaDeEURODEBE, Last(Diario.FECHA) AS ÚltimoDeFECHA
FROM Diario
GROUP BY Diario.SUBCTA;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 30-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por eso te pregunto, ¿qué quieres hacer exactamente?, para "traducirlo" a firebird
Responder Con Cita
  #5  
Antiguo 30-11-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Obtener el último precio al que se ha vendido un producto.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 30-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por marcoszorrilla Ver Mensaje
Obtener el último precio al que se ha vendido un producto.
Ya, eso lo supongo, marcos
Pregunto que dónde está ese precio, es que nunca he usado access, ese Last(Diario.Fecha), ¿Diario es una tabla y Fecha es un campo?
Y qué devuelve ¿el último registro de esa tabla?, ¿el de mayor fecha?, ¿el último precio que se le vendió a ese cliente o el último precio que se vendió a cualquier cliente?.

En lugar de Last(Diario.Fecha), puedes hacer un (select ..........), pero para responderte necesito saber lo preguntado antes
Responder Con Cita
  #7  
Antiguo 30-11-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
La consulta que quiero hacer es la segunda del mensaje de inicio, la parte que está en color rojo, esa línea es la que quiero añadir la base de datos es Firebird, el ejemplo abreviado en Access es lo que quiero hacer.

La tabla se llama LineasVentas y entre otros contien los campos, fecha, codigoproducto, producto, Unidades, Precio...

Lo tengo funcionando, lo que es la primera consulta que figura en el mensaje de inicio de este hilo y lo que quiero obtener es la segunda, pero me encuentro con que Firebird no posee la instrucción Last.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #8  
Antiguo 30-11-2012
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola

Yo estoy de acuerdo con Casimiro, hay que obtener el precio de la última fecha. A ver si esto funciona para lo que deseas.

Código SQL [-]
Select 
   Max(Codclient) as Codclient, 
   Max(Fecha) as Fecha,
   Producto, 
   Sum(Unidades) as Unidades,
   Max(Precio) as Precio, 
   Sum(Subtotal) as Subtotal, 
   Avg(Precio) as PMedio, 
   Min(Precio) as MPrecio,
   (select first 1 X.precio from LineasVentas X where X.Codclient = :C And X.Fecha between :F1 and :F2 order by X.fecha desc) as UltimoP
   
from LineasVentas
Where Codclient = :C And Fecha between :F1 and :F2
Group By Producto
Having Sum(Unidades) <> 0
Order by Producto

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #9  
Antiguo 30-11-2012
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Iba a decir algo, pero egostar se me adelanto :P
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #10  
Antiguo 01-12-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Gracias a todos, el lunes haré la prueba y os digo como resultó.


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #11  
Antiguo 01-12-2012
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Ahora que lo veo nuevamente, me parece que me ha faltado un detalle importante.

Código SQL [-]
Select 
   Max(Codclient) as Codclient, 
   Max(Fecha) as Fecha,
   Producto, 
   Sum(Unidades) as Unidades,
   Max(Precio) as Precio, 
   Sum(Subtotal) as Subtotal, 
   Avg(Precio) as PMedio, 
   Min(Precio) as MPrecio,
   (select first 1 X.precio from LineasVentas X 
    where X.Codclient = :C And 
          X.Fecha between :F1 and :F2 And
          X.Producto = Producto  
    order by X.fecha desc) as UltimoP
   
from LineasVentas
Where Codclient = :C And Fecha between :F1 and :F2
Group By Producto
Having Sum(Unidades) <> 0
Order by Producto

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como hacer con Delphi el equivalente de una consulta de datos anexados de access JoAnCa Conexión con bases de datos 1 09-07-2008 16:02:14
Obtener version de Firebird TEO127 SQL 0 24-02-2007 19:49:01
Como puedo obtener el numero de meses entre 2 fechas en firebird ElGatitoTapatio Firebird e Interbase 15 22-01-2007 16:35:15
Como Obtener un Listado de Clientes conectados a FIREBIRD???? AGAG4 Firebird e Interbase 2 24-04-2006 20:58:43
Como obtener la paleta de componentes de firebird barman Firebird e Interbase 7 12-06-2003 18:15:01


La franja horaria es GMT +2. Ahora son las 14:00:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi