Hola Pedro,
Pedro escribió:
Hola Ariel:
De la Tabla combustible, necesito extraer el último registro ingresado
de acuerdo al tipo de combustible, originalmente lo traté de resolver
con la fecha de ingreso, pero tuve problemas al trabajar con ese tipo de
formato, por lo que la siguiente opción que vi es filtrar por el campo
ID_Combustible.
si entiendo bien, ID_Combustible es la clave primaria numérica generada
automáticamente, de forma tal que los ingresos se numeran 0, 1, 2, 3, 4,
5, 6, 7, ...
Entonces, ¿has tratado de ver cuál es el último ingreso teniendo en
cuanta el TIPO de combustible (campo Tipo), y el parámetro que indica
cuál ha sido el último es precisamente la clave primaria ID_Combustible?
Si es así, ese es un engaño muy frecuente, al cual se presta el campo
autoincrementado: el objeto con ID 2 parecería haber sido ingresado
ANTES que el objeto con ID 6 (es obvio que 2 < 6, por lo tanto 2 sucedió
ANTES que 6).
PERO ES SÓLO UNA ILUSIÓN: ningún sistema de base de datos garantiza que
la secuencia con que numera los registros con clave primaria numérica
COINCIDA/corresponda con el ORDEN TEMPORAL.
SI en tu base observas que el orden de la ID coincide con el ORDEN del
TIEMPO:
ID | fecha
---------------------------
0 | anteayer
1 | ayer
2 | hoy
Es tan sólo una COINCIDENCIA CASUAL, NO una garantía de que sea
efectivamente así :-(
Para ORDENAR según un criterio TEMPORAL, debes tomar sí o sí un campo
con valor temporal (Date/Timestamp). Lo demás, si funciona, es de pura
suerte.
Si estás empleando una base embebida HSQLDB, HSQLDB tiene varias
funciones para comparar fechas. En mi base de ejemplo hay algunos ejemplos.
Un simple ejemplo:
SELECT *
FROM "CLIENTES"
WHERE DATEDIFF( 'yy', "FECHA_INGRESO", NOW() ) < 5
ORDER BY "FECHA_INGRESO" DESC
te muestra todos los clientes que han ingresado desde hace cinco años,
ordenándolos por la fecha de ingreso (si es Timestamp ignora las
diferencias de hora) en sentido descendiente.
****************************************************************************
Respecto a la tabla en gral., a simple vista y sin el diseño de la base
completa a la vista, hay dos errores de diseño (y recuerda que un BUEN
diseño no es una cuestión estética: luego te facilitará el trabajo y
ahorrarás muchísimo tiempo)
PRIMERO: en el campo "Tipo" guardas precisamente TIPOS, es decir clases
de objetos, cada registro pertenece sí o sí a una clase/tipo. Aquí
deberías tener una pequeña tabla llamado TIPO:
Tabla TIPO
=======================================
id_tipo | tipo
---------------------------------------
0 | Diesel
1 | Aceite 2 tiempos
2 | 93 Octanos
3 | 95 Octanos
4 | 97 Octanos
Luego en la tabla COMBUSTIBLE creas una clave foránea que relacione
ambas tablas, por ejemplo ref_tipo.
De esta forma, garantizas la integridad referencial de la tabla: en
COMBUSTIBLE sólo podrás ingresar registros que pertenezcan [referencien]
a algún tipo de combustible; si no lo hace, se generará un error, y no
podrás ingresarlo.
SEGUNDO: el campo Ref_fecha, ¿es una clave foránea que referencia a una
fecha guardada en otra tabla? A esto no le veo mucha razón de ser, es
más, podría llegar a complicar las cosas, ya que las comparaciones que
tienen un parámetro temporal se deben efectuar sobre campos tipo
Date/Timestamp.
Seguro tú has tenido tus razones, si me las cuenta te puedo dar una
opinión para ver si realmente te complica o no.
¿Qué es un issue?
linda pregunta ;-)
Un issue es un bug, es decir un error de la aplicación, que tu reportas
y los ingenieros tratan de solucionar. (= explicación simplificada -- y
optimista)
Sobre las decimales en las consultas, por defecto tengo configurado la
coma como separador decimal, pero, al agregar una expresión, por
ejemplo: "PrecioN" * 0,19 ocurre esto:
La consulta solamente soporta el punto como separador decimal.
he podido reproducirlo. Veré si ya está reportado como issue; si no,
consultaré si se trata de un issue o de una característica de OOo Base.
Saludos,
Ariel.
--
Ariel Constenla-Haile
La Plata, Argentina
[EMAIL PROTECTED]
[EMAIL PROTECTED]
http://www.arielconstenlahaile.com.ar/ooo/
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]