Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Extracción de campos (https://www.clubdelphi.com/foros/showthread.php?t=95058)

pablocarlos 09-02-2021 12:57:54

Extracción de campos
 
Saludos. Tengo una tablas en sql y necesito encontrar tres campos. Numero, Sorteo, Pais, Donde pais se esta pasando por parametro.
Escribo esto -->
Código SQL [-]
SELECT id_tiquet, Numero, Sorteo, Pais FROM tiket
Where  Numero = (SELECT MAX(Numero) from tiket WHERE Pais = : pais)  or Sorteo = (SELECT MAX(Sorteo) from tiket where Pais = : pais)
order by Sorteo desc LIMIT 1
Obvio que no trae lo que necesito.
El numero y sorteo debe ser el valor mayor dentro de la tabla filtrando por pais, osea Chile sorte 3 numero 49
Donde todos los registros de la tabla encuentra a todos los de Chile y dentro de ese pais el sorteo max y el numero max. Obvio que no funciona como es debido. Se agradece alguna sugerencia. Saludos!

kuan-yiu 09-02-2021 13:07:10

No sé si entendí bien los datos de la tabla
Código SQL [-]
select max(sorteo) from ticket
where numero=(select max(numero) from tiket where pais= : pais)

pablocarlos 09-02-2021 13:26:38

Gracias Kuan_yiu

Código SQL [-]
select Numero, Sorteo, Pais, max(Numero) from tiket
where Sorteo=(select max(Sorteo) from tiket where pais= : pais)
order by Sorteo desc LIMIT 1

Haciendo pruebas con tres paises no da el resultado deseado
Pais "Argentina" bien
Pais "Chile" bien
Pais "Uruguay" resultado numero max "1000000" sorte "2" pais "Argentina" cuando debería ser numero max 68 sorteo 2 pais Uruguay.
Sigo probando...

pablocarlos 09-02-2021 15:01:03

Código SQL [-]
select Numero, Sorteo, Pais, max(Numero) from tiket where Sorteo=(select max(Sorteo) from tiket where pais= : pais) order by Sorteo desc LIMIT 1
Gracias Kuan_yiu

Haciendo pruebas con tres paises no da el resultado deseado
Pais "Argentina" bien
Pais "Chile" bien
Pais "Uruguay" resultado numero max "1000000" sorte "2" pais "Argentina" cuando debería ser numero max 68 sorteo 2 pais Uruguay.
Sigo probando... Creo que debería filtrar primero por pais, luego dentro del país por max(sorteo) y dentro de país y sorteo y desde los valores encontrados mostrar el max(numero).

kuan-yiu 09-02-2021 15:33:02

Pon un ejemplo de los datos y exactamente la línea que quieres conseguir.

pablocarlos 09-02-2021 16:30:55

Cita:

Empezado por kuan-yiu (Mensaje 539941)
Pon un ejemplo de los datos y exactamente la línea que quieres conseguir.

Perfecto, Una tabla llamada tiket, campos ---> sorteo, numero, pais, id. tiket (hay otros campos pero no estàn involucrados) Concretamente necesito que busque un pais (ese sería el parametro) dentro de ese país encuentre el número de sorteo mayor (max(Sorteo) y dentro de ese rango de sorteo el numero mayor (max(numero)...
Ejemplo
tengo los siguientes datos pais uruguay (obvio hay otros paises) sorteos 1, 2, 3 (debería filtrar por el 3) numeros 1,2 ....1002 sorteo 2, números 1,2..1000 sorteo 3, (debería mostrar sorteo 3 y el numero 1000). Cerrando, con el parametro 'Uruguay' debería traer sorteo 3 numero 1000. Gracias por responder. Saludos

kuan-yiu 09-02-2021 17:06:00

Si he entendido bien quieres la línea completa. Para el país indicado el número máximo de cada sorteo.
Código SQL [-]
select a.* from tiket a
where a.pais= : pais and a.numero in
(select max(b.numero) numero from tiket b
where a.Sorteo=b.Sorteo)
order by a.sorteo
Como no indicas que motor de BD usas he tratado de hacerlo sin funciones especiales.

pablocarlos 09-02-2021 17:21:08

Cita:

Empezado por kuan-yiu (Mensaje 539945)
Si he entendido bien quieres la línea completa. Para el país indicado el número máximo de cada sorteo.
Código SQL [-]select a.* from tiket a where a.pais= : pais and a.numero in (select max(b.numero) numero from tiket b where a.Sorteo=b.Sorteo) order by a.sorteo

Como no indicas que motor de BD usas he tratado de hacerlo sin funciones especiales.

bd mysql. Lo extraño (para mi) que tus lineas funcionan en dos paises, busco un tercero y no encuentra nada, Gracias

Casimiro Notevi 09-02-2021 17:42:58

Es que después de un montón de mensajes no queda exactamente claro de lo que necesitas, y el motivo es que siempre se dice lo que se está haciendo, pero no realmente lo que se quiere hacer. Lo importante aquí es la estructura de las tablas involucradas (al menos los campos involucrados) y lo que se quiere conseguir.

Siempre aconsejo leer este hilo donde se explica cómo hacer mejor la pregunta, para obtener una respuesta más acertada.

pablocarlos 09-02-2021 17:52:13

Cita:

Empezado por Casimiro Notevi (Mensaje 539947)
Es que después de un montón de mensajes no queda exactamente claro de lo que necesitas, y el motivo es que siempre se dice lo que se está haciendo, pero no realmente lo que se quiere hacer. Lo importante aquí es la estructura de las tablas involucradas (al menos los campos involucrados) y lo que se quiere conseguir.

Siempre aconsejo leer este hilo donde se explica cómo hacer mejor la pregunta, para obtener una respuesta más acertada.


Veamos.... quiero filtrar la tabla tiket con campos pais, sorteo, numero, por un pais dentro de ese pais filtrar por max(sorteo) y dentro de ese sorteo por max(numero). bd mysql



pais = Chile
chile = sorteo 3
chile, sorteo 3 = numero 4
resultado chile, 3, 4 (pais, sorteo(el mayor), numero(el mayor))

Y no se como explicar mejor :(

Casimiro Notevi 09-02-2021 18:17:56

Cita:

Empezado por kuan-yiu (Mensaje 539937)
No sé si entendí bien los datos de la tabla

Cita:

Empezado por kuan-yiu (Mensaje 539941)
Pon un ejemplo de los datos y exactamente la línea que quieres conseguir.

Cita:

Empezado por kuan-yiu (Mensaje 539945)
Si he entendido bien quieres la línea completa. Para el país indicado el número máximo de cada sorteo.
Como no indicas que motor de BD usas he tratado de hacerlo sin funciones especiales.

Cita:

Empezado por Casimiro Notevi (Mensaje 539947)
..no queda exactamente claro de lo que necesitas.. Lo importante .. es la estructura de las tablas involucradas (al menos los campos involucrados) y lo que se quiere conseguir.

Yo creo que está claro que constantemente se ha repetido que no está claro y que se necesitaría un ejemplo de los datos, estructura de la tabla, etc.
Pero, bien, me parece que ya está más claro, lo que tienes es algo así:



Y quieres conseguir algo así como:

7 | CHILE | 3 | 16

¿Es eso?

pablocarlos 09-02-2021 18:34:26

Cita:

Empezado por Casimiro Notevi (Mensaje 539951)
Yo creo que está claro que constantemente se ha repetido que no está claro y que se necesitaría un ejemplo de los datos, estructura de la tabla, etc.
Pero, bien, me parece que ya está más claro, lo que tienes es algo así:





Y quieres conseguir algo así como:


7 | CHILE | 3 | 16


¿Es eso?

Exacto!

Gracias por tratar de entender

Casimiro Notevi 09-02-2021 19:58:34

Otra duda, si existe esto:
Cita:

5 | CHILE | 2 | 28
7 | CHILE | 3 | 16

¿Qué registro debe devolver?

pablocarlos 09-02-2021 20:07:19

Cita:

Empezado por Casimiro Notevi (Mensaje 539956)
Otra duda, si existe esto:

¿Qué registro debe devolver?

el 7 (mayor sorteo) con mayor numero osea si tengo chile 3, 16 y chile, 3, 17 debería devolver chile, 3, 17

Casimiro Notevi 09-02-2021 20:36:09

Ya estamos, no se entiende :confused::confused::confused:

pablocarlos 09-02-2021 21:00:24

Cita:

Empezado por Casimiro Notevi (Mensaje 539958)
Ya estamos, no se entiende :confused::confused::confused:


la consulta deberia devolver el id 285 chile, sorteo 2 numero 45 por que dentro de chile el sorteo mayor es el 2 y dentro del sorteo mayor (2) el numero mayor es el 45...

Ya con imagen creo no confundir. Gracias

pablocarlos 09-02-2021 21:01:00

No me permitio subir imagen

pablocarlos 09-02-2021 21:28:19

nuevo planteo


Tengo una tabla en mysql con los siguientes campos: id (autoincremental), pais(string), sorteo(int), numero(int).

necesito encontrar una fila con un determinado pais (este por parametro), dentro del pais encontrar el numero de sorteo más alto y dentro del sorteo el numero max... por ejemplo
tengo pais sorteo numero
chile 1 10
chile 1 12
chile 2 100
españa 1 2
españa 1 3
si busco por chile el resultado debería ser : chile-2-100 por que el sorteo mayor es 2 y el número mayor dentro del sorteo es 100. En el caso de españa debería encontrar españa,1,3
por que dentro de españa el numero de sorteo mayor es 1 y el número mayor en número es 3. Espero ser claro. Muchas gracias

Casimiro Notevi 09-02-2021 22:21:53

Cita:

Empezado por pablocarlos (Mensaje 539963)
chile 1 10
chile 1 12
chile 2 100
españa 1 2
españa 1 3
si busco por chile el resultado debería ser : chile-2-100 por que el sorteo mayor es 2 y el número mayor dentro del sorteo es 100. En el caso de españa debería encontrar españa,1,3
por que dentro de españa el numero de sorteo mayor es 1 y el número mayor en número es 3. Espero ser claro. Muchas gracias

Ya, pero eso no responde a mi duda, imagina que tienes:
#10 chile 1 10
#11 chile 1 120
#12 chile 2 10
#13 españa 1 2
#14 españa 1 3

¿Qué debería sacar de Chile, el registro #12, porque el 2 es mayor que el 1, o debería sacar el registro #11 porque 120 es mayor que 10?

pablocarlos 09-02-2021 22:26:26

Cita:

Empezado por Casimiro Notevi (Mensaje 539966)
Ya, pero eso no responde a mi duda, imagina que tienes:
#10 chile 1 10
#11 chile 1 120
#12 chile 2 10
#13 españa 1 2
#14 españa 1 3

¿Qué debería sacar de Chile, el registro #12, porque el 2 es mayor que el 1, o debería sacar el registro #11 porque 120 es mayor que 10?

el 12.
primero por pais, dentro de pais por numero de sorteo mayor y luego por numero mayor... en el ejemplo suyo sería el 12. Muchas gracias por estar presente!


La franja horaria es GMT +2. Ahora son las 09:00:02.

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