![]() |
A fechas iguales tomar el registro mayor
Hola a todos
Tengo una tabla llamada Cotizaciones y sus campos son "NumeroCOT" y "FechaCOT". Debo obtener el numero de la fecha igual o inmediatamente menor que la transferida en un parámetro. Si hubiera dos fechas de igual valor que cumplan con la condición, debo tomar en NumeroCOT mayor. Si el código SQL es: Código:
Select Max(FechaCOT) Si el código SQL es: Código:
Select NumeroCOT Aprovecho esta pregunta para consultarles si hiciera esto en procedimientos almacenados ganaria en velocidad o seria indistinto. Gracias desde ya. |
oeder by NumeroCOT
|
En el segundo de los casos usaría el order by NumeroCOT, y luego usando MiQuery.Last, me pararía en el registro deseado. Es como lo vengo haciendo hasta ahora. Pero me parece que no es lo óptimo ya que dia a dia la tabla Cotizaciones va creciendo y de este modo la estoy trayendo entera a la memoria por un solo registro que preciso.
Gracias igualmente. |
¿En qué base trabajas? En algunas bases puedes limitar los registros que regresa la consulta de manera que podría funcionarte lo del order by.
Si no, quizá te sirva así:
// Saludos |
Ante utilizaba Paradox ahora InterBase.
¿Como es eso de limitar los registros resultantes? |
Cita:
En algunos motores de bases de datos existen modificadores de la cláusula SELECT para que el servidor sólo devuelva un número determinado de registros. Por ejemplo, en MySql la consulta
te devolverá únicamente los primeros diez registros. Yo no conozco Interbase :o pero quienes saben dicen esto: http://www.clubdelphi.com/foros/show...itar+registros Por otra parte, a diferencia de las bases de datos de buró, como Paradox- que manda todos los registros resultantes al cliente -muchos servidores mandan los resultados "sobre pedido" (o pueden ser configurados para que así lo hagan), esto es, mandan sólo unos cuantos registros del resultado al cliente y conforme éste va pidiendo más, el servidor le manda los siguientes. Es por ello que muchas veces, aunque los datos comienzan a aparecer de inmediato, instrucciones como DataSet.Last demoran una eternidad porque se obliga al servidor a mandar todos los datos. Pero fíjate que en tu caso puedes ordenar los resultados en forma descendente:
El primer registro de esta consulta- que no el último -es el registro que buscas, de manera que no teniendo que usar Last, me parece que en realidad no estás trayendo todos los registros por lo que no importaría cuánto crece la tabla. De cualquier forma a mi me gusta más la primera consulta que te puse ya que no requiere de procedimientos almacenados y sólo pide lo que quieres. // Saludos |
Roman
Muchísimas gracias y disculpá la demora de mi respuesta. Me funcionó el primer caso tanto en paradox como en InterBase. Solo te preguntaba por el limitante para saber, porque no sabía que existia. Bueno. Hasta la próxima. |
La franja horaria es GMT +2. Ahora son las 05:17:40. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi