Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   consulta del numero mayor de subregistro (https://www.clubdelphi.com/foros/showthread.php?t=53753)

Yun-i 28-02-2008 18:36:33

consulta del numero mayor de subregistro
 
Hola, pues aqui dando molestias espero que me puedan a yudar una vez mas :o

estoy trabajando con Delphi 6, MS SQL Server, por dedio de ADO por supuesto.

tengo una tabla llamada cotizaciones, que entre otros campos tiene cotizacion y subcotizacion. Lo que quiero es obtener la subcotizacion mas reciente de una cotizacion por ejemplo:

Cot---sub
1------1
1------2
1------3
2------1
2------2
3------1
3------2
4------1
5------1
5------2

lo que espero obtener es:

cont---sub
1------3
2------2
3------2
4------1
5------2

me imagino algo como:
'select max(sub)from cotizaciones'
pero me falta el que sea por cada una de las cotizaciones.

Gracias por su ayuda:)
:)
saluods a todos

gluglu 28-02-2008 18:48:29

No lo he probado, pero sería algo así ....

Código SQL [-]
Select Distinct Co1.Cot,
(Select Max(Co2.Sub) from Cotizaciones Co2
 where Co1.Cot = Co2.Cot)
from Cotizaciones Co1

;)

keyboy 28-02-2008 19:02:54

¿No sería más adecuado un agrupamiento?

Código SQL [-]
select cot, max(sub)
from cotizaciones
group by cot

Bye

Yun-i 28-02-2008 19:34:58

Gracias GluGlu :) eres muy amable si galo como lo comente :)

no lo he corrido en delphi pero en el analizador de consultas de sql server si galo pero mi pregunta es que es co1 y co2?? solo para entender como lo hace gracias otra vez :):D

Yun-i 28-02-2008 19:38:43

Cita:

Empezado por keyboy (Mensaje 269448)
¿No sería más adecuado un agrupamiento?


Código SQL [-]
select cot, max(sub)
from cotizaciones
group by cot





Bye

graciass esta solocion es tambien correcta jejejej muchas gracias por su apoyo :)

keyboy 28-02-2008 19:48:40

¿galo? :confused:

¿Qué es galo?

Bye

Yun-i 28-02-2008 20:00:50

Cita:

Empezado por keyboy (Mensaje 269470)
¿galo? :confused:

¿Qué es galo?

Bye

jejeje perdon es jalo :( osea si que si corrio pero en el analizador de consultas de sql server.

En Delphi manda un error que dice:

"el prefijo de la comlumna Co1 no coincide con un nombre de tabla o con un alias usado en la consulta "

rulo_m 28-02-2008 20:02:13

me imagino que es jalo.. funciono, andubo pues..

lo de co1 y co2 son nombres con el cual hace referencia a una tabla en este caso ambas hacen referencia a cot pero al hacer el join de dos tablas que resultan ser la misma pues hay que llamarse de algun modo diferente

Delphius 28-02-2008 20:02:44

Cita:

Empezado por keyboy (Mensaje 269470)
¿galo? :confused:

¿Qué es galo?

Bye

Creo que lo que quiso decir el amigo es jalo... del verbo jalar:D

Para Yun-i, co1 y co2 son "alias" de la tabla Cotizaciones. Recomiendo la lectura de un manual o libro que trate sobre SQL.

Saludos,

Yun-i 28-02-2008 20:04:00

Cita:

Empezado por rulo_m (Mensaje 269478)
lo de co1 y co2 son nombres con el cual hace referencia a una tabla en este caso ambas hacen referencia a cot pero al hacer el join de dos tablas que resultan ser la misma pues hay que llamarse de algun modo diferente


y como podria yamarlas diferente?? :o
podeis ayudarme?

Delphius 28-02-2008 20:10:39

Cita:

Empezado por Yun-i (Mensaje 269482)
y como podria yamarlas diferente?? :o
podeis ayudarme?

Como he dicho justo antes de ti... esos nombres son "alias", son ficticios... es una manera de llamar a tu tabla.
Para realizar ese tipo de consulta se requiere diferenciar a un select del otro que apuntan a una misma tabla... op2 mantiene la sumas, pero op1 es quien las "agrupa".

Espero que se entienda.
como he dicho antes, un manual de SQL puede esclarecerte algunas cosas.

Saludos,

rulo_m 28-02-2008 20:14:16

Cita:

Empezado por gluglu (Mensaje 269443)
No lo he probado, pero sería algo así ....

Código SQL [-]
Select Distinct Co1.Cot,
(Select Max(Co2.Sub) from Cotizaciones Co2
 where Co1.Cot = Co2.Cot)
from Cotizaciones Co1

;)

Lo que hace aqui compañero es comparar los datos de 2 tablas
Código SQL [-]
where Co1.Cot = Co2.Cot
pero las dos tablas resultan ser la tabla cotizaciones entonces a cada una se le asigna un "alias" Cotizaciones Co2 y cotizaciones Co1 para saber a cual de las 2 tablas hacemos referencia en cada dato.. el dato cot viene de la pirmera tabla y el dato max(sub)viene de la segunda tabla.. a ver si me explique bien.. :p

Yun-i 28-02-2008 20:17:38

Cita:

Alias

En determinadas circunstancias es necesario asignar un nombre a alguna columna determinada de un conjunto devuelto, otras veces por simple capricho o por otras circunstancias. Para resolver todas ellas tenemos la palabra reservada AS que se encarga de asignar el nombre que deseamos a la columna deseada. Tomado como referencia el ejemplo anterior podemos hacer que la columna devuelta por la consulta, en lugar de llamarse apellido (igual que el campo devuelto) se llame Empleado. En este caso procederíamos de la siguiente forma: SELECT DISTINCTROW Apellido AS Empleado FROM Empleados;
algo asi?? osea debo renombrarlo me faltaba el as?

Yun-i 28-02-2008 20:19:33

Cita:

Empezado por rulo_m (Mensaje 269487)
.. a ver si me explique bien.. :p

sip si te explicas bien pero el problea es que delphi no reconoce ese 'alias'
y por alguna razon manda el error antes comentado :confused:

rulo_m 28-02-2008 20:22:31

Cita:

Empezado por Yun-i (Mensaje 269489)
algo asi?? osea debo renombrarlo me faltaba el as?

ya intentaste con el cotizaciones AS co1?

enecumene 28-02-2008 20:37:12

Perdón si me salgo del hilo, pero no es "HALAR"?

Cita:

HALAR
(Del fr. haler).
1. tr. Mar. Tirar de un cabo, de una lona o de un remo en el acto de bogar.
2. tr. And., C. Rica, Cuba, Hond., Nic., Pan. y Ven. Tirar hacia sí de algo.
3. tr. coloq. Cuba. Succionar un líquido a través de una pajilla o de otro conducto.
4. tr. coloq. Cuba. Dicho de una máquina: Consumir combustible o electricidad.
5. tr. coloq. Ven. Arrastrar por la fuerza.
6. intr. coloq. Cuba y Ven. empuñar (‖ asir con la mano). Halar POR el arma. Halar DE un instrumento de labranza.
7. intr. coloq. Cuba. Aspirar el humo del tabaco.
8. intr. Ven. Dicho de un horno o de una chimenea: tirar (‖ producir el tiro o corriente de aire).
9. prnl. Cuba. Dicho de una persona: Desfigurársele la cara por enfermedad o por cansancio.
Saludos.

Yun-i 28-02-2008 20:39:27

Cita:

Empezado por rulo_m (Mensaje 269491)
ya intentaste con el cotizaciones AS co1?

Código Delphi [-]
ADOQuery2.SQL.Add('Select Distinct as Co1.NUM_COTIZACION,(Select Max(as Co2.NUM_SUBCOTIZACION) from SIE_COTIZACIONES Co2 where Co1.NUM_COTIZACION =Co2.NUM_COTIZACION)');
ADOQuery1.SQL.Add('from SIE_COTIZACIONES  Co1');

este es el codigo que he metido pero donde poner as no lo se

ahi lo puse y me marca error al ejecutarlo:(
gracias por su tiempo

rulo_m 28-02-2008 20:50:23

Código SQL [-]
Select Distinct Co1.NUM_COTIZACION,
(Select Max(Co2.NUM_SUBCOTIZACION) 
from SIE_COTIZACIONES AS Co2 where Co1.NUM_COTIZACION =Co2.NUM_COTIZACION)from SIE_COTIZACIONES AS Co1

el AS va despues del from xxxxxx

enecumene 28-02-2008 20:52:03

Hola, es lo que te decia rulo_m asi:
Código Delphi [-]
ADOQuery2.SQL.Add('Select Distinct as Co1.NUM_COTIZACION,(Select Max(as Co2.NUM_SUBCOTIZACION) from SIE_COTIZACIONES Co2 where Co1.NUM_COTIZACION =Co2.NUM_COTIZACION)');
ADOQuery1.SQL.Add('from SIE_COTIZACIONES as Co1');

Saludos.

Edito: ya rulo_m contestó.

Yun-i 28-02-2008 20:53:41

Cita:

Empezado por keyboy (Mensaje 269448)
¿No sería más adecuado un agrupamiento?


Código SQL [-]
select cot, max(sub)
from cotizaciones
group by cot





Bye

es solo por no quedarme con la duda la verdad esque tenia que hacerlo rapido pero si me gustaria saber bine que onda con eso de los alias pero esta solucion corre en delphi de manera sencilla


gracias de antemano por todo :)


La franja horaria es GMT +2. Ahora son las 00:41:24.

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