Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 30/11/2012
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: 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
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #2  
Old 30/11/2012
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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.
Reply With Quote
  #3  
Old 30/11/2012
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: 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
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #4  
Old 30/11/2012
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Por eso te pregunto, ¿qué quieres hacer exactamente?, para "traducirlo" a firebird
Reply With Quote
  #5  
Old 30/11/2012
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: 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
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #6  
Old 30/11/2012
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Quote:
Originally Posted by marcoszorrilla View Post
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
Reply With Quote
  #7  
Old 30/11/2012
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: 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
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #8  
Old 30/11/2012
[egostar] egostar is offline
Registrado
 
Join Date: Feb 2006
Posts: 6,572
Poder: 27
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
Reply With Quote
  #9  
Old 30/11/2012
RONPABLO's Avatar
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Join Date: Oct 2004
Posts: 1,514
Poder: 23
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"
Reply With Quote
  #10  
Old 01/12/2012
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: 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
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #11  
Old 01/12/2012
[egostar] egostar is offline
Registrado
 
Join Date: Feb 2006
Posts: 6,572
Poder: 27
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
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
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
Obtener version de Firebird TEO127 SQL 0 24/02/2007 19:49
Como puedo obtener el numero de meses entre 2 fechas en firebird ElGatitoTapatio Firebird e Interbase 15 22/01/2007 16:35
Como Obtener un Listado de Clientes conectados a FIREBIRD???? AGAG4 Firebird e Interbase 2 24/04/2006 20:58
Como obtener la paleta de componentes de firebird barman Firebird e Interbase 7 12/06/2003 18:15


All times are GMT +2. The time now is 10:08.


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