Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   ¿como obtener la fecha mas reciente y la mas antigua? (https://www.clubdelphi.com/foros/showthread.php?t=76197)

JXJ 15-10-2011 05:31:16

¿como obtener la fecha mas reciente y la mas antigua?
 
hola

tengo el problema de obtener la fecha mas reciente y mas antigua de un
listado de productos.

con firebird que sentencia se usa.
los campos son datetime.

aunque tambien tengo otros campos de tipo date.


encontre que con esto obtengo el registro mas reciente.

el primer registro indicado por el numero 1

Código SQL [-]
select first 1 id, numerodeserie, validodesde from productos;

pero como obtengo el mas antiguo?


este no me sirve
Código SQL [-]
select min(validodesde ) from productos por que solo me da la fecha y yo quiero aparte el id , numerodeserie

esta bien o ando haciendo algo mal hay mejores formas??

JXJ 15-10-2011 05:45:24

creo que esta puede servirme
Código SQL [-]
select  id, min(validodesde) as fechaantigua from certificado
group by 1

el problema es qeu si tengo varios registros con la misma fecha me los trae todos.
el otro problema es que solo pueod poner 2 campos

si la pongo asi.

Código SQL [-]
select  id, ACTIVO, min(validodesde) as fechaantigua from certificado
group by 1

me da el error

Engine Error (code = 335544569):
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

SQL Error (code = -104):
Invalid token.

¿cual pondria como agregate ?

D-MO 15-10-2011 05:52:22

desconozco firebird, pero ¿porqué haces group by 1 en lugar de id y/o ACTIVO?

ecfisa 15-10-2011 08:11:59

Hola JXJ.

Probá de este modo:
Código SQL [-]
SELECT FIRST 1 T1.ID_TABLA, T1.VALIDODESDE, T1.ACTIVO, 
FROM TABLA T1
WHERE T1.VALIDODESDE = (SELECT  MIN(T2.VALIDODESDE) FROM TABLA T2)
GROUP BY T1.ID_TABLA, T1.VALIDODESDE, T1.ACTIVO

Saludos.

ecfisa 15-10-2011 08:27:04

Cita:

Empezado por D-MO (Mensaje 415676)
desconozco firebird, pero ¿porqué haces group by 1 en lugar de id y/o ACTIVO?

Hola D-MO.

Si bién Firebird permite usar números para hacer referencia a columnas, no es aconsejable ya que es una técnica obsoleta. Se recomienda el uso de sinónimos en su lugar.

Con el uso de números:
Código SQL [-]
SELECT ID_TABLA, NUM1 - NUM2
FROM TABLA
ORDER BY ID_TABLA, 2

Recomendada:
Código SQL [-]
SELECT ID_TABLA, NUM1 - NUM2 AS DIFERENCIA
FROM TABLA
ORDER BY ID_TABLA, DIFERENCIA

Un saludo. :)

D-MO 15-10-2011 17:41:14

Gracias ecfisa por el comentario, a decir verdad algo así suponía pero no veo la razón de utilizarlo así ya que es mas legible utilizar los nombres de los campos o alias, tal y como comentas.

Ahora, con respecto a esta consulta:
Cita:

Empezado por ecfisa (Mensaje 415679)
Código SQL [-]
SELECT FIRST 1 T1.ID_TABLA, T1.VALIDODESDE, T1.ACTIVO, 
FROM TABLA T1
WHERE T1.VALIDODESDE = (SELECT  MIN(T2.VALIDODESDE) FROM TABLA T2)
GROUP BY T1.ID_TABLA, T1.VALIDODESDE, T1.ACTIVO

Pregunto, ¿Porqué anidar el min()?

Saludos.

guillotmarc 15-10-2011 18:33:53

Hola.

Más reciente :

select first 1 id, numerodeserie, validodesde
from productos
order by validodesde descending;

Mas antiguo :

select first 1 id, numerodeserie, validodesde
from productos
order by validodesde ascending;

Es la misma consulta, cogiendo el primer registro, ordenado por fecha de mayor a menor, o bien de menor a mayor.

Saludos.

ecfisa 15-10-2011 18:51:25

Cita:

Empezado por D-MO (Mensaje 415705)
Pregunto, ¿Porqué anidar el min()?

Creo que fué por que eran pasadas las 4 de la mañana (tengo que entregar un trabajo el lunes) y tenía las neuronas medio aletargadas... :D

Pero yá Marc, le ha dado una excelente respuesta.

Un saludo.

JXJ 15-10-2011 22:31:12

el

group by 1

y el min()
lo encontre en buscando en internet..
en lugar de last.

voy a revisarlos a ver que tal me queda. muchas gracias. a todos.


La franja horaria es GMT +2. Ahora son las 06:33:10.

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