(17-10-2019 14:35)manurocck escribió: [ -> ] (17-10-2019 08:35)Diesel escribió: [ -> ]Ya que te metiste a pensarlo nuevamente conmigo te hago una consulta.
Ves la nota que puse en le filtro "where"?? Filtramos por puesto 1. Y luego hacemos el SUM... pero al hacer el SUM estamos haciendo el SUM de las carreras que obtuvo el primer puesto ese caballo... o sea la cantidad de guita que recibió en apuestas solamente para la fecha y para el primer puesto... eso no esta medio mal ?? porque en el ejercicio te pedía la cantidad de guita q haya sacado el caballo en apuestas sin importar q haya sido en primeros puestos digamos y que esa guita sea la menor que se apostó ever... o sea como que habria que anidar todo el resultado y LUEGO hacer el filtro del primer puesto y la fecha... o no?
Si no se entiende reformulo xD
Gracias de nuevo!
Creo que tenés razón .. Tal vez se podría solucionar reemplazando el SUM por otra subquery que calcule el total de apuestas del caballo sin importar el puesto en el que salió
SELECT cb.nombreCaballo
FROM Caballos cb JOIN Carreras cr ON (cb.idCarrera = cr.idCarrera)
WHERE cb.puesto = 1 AND DAY (cr.fecha) = DAY ( GETDATE() )
GROUP BY cb.nombreCaballo
HAVING (SELECT SUM(cb3.totalApostado
FROM Caballos cb3
WHERE cb3.nombreCaballo = cb.nombreCaballo
GROUP BY cb3.nombreCaballo ) =
(SELECT TOP 1 SUM(cb2.totalApostado)
FROM Caballos cb2
GROUP BY cb2.nombreCaballo
ORDER BY SUM(cb2.totalApostado) asc)
ORDER BY SUM (cb.totalApostado) asc
Qué te parece?
Testeado y funciona! muy bien.
CREATE TABLE CABALLOS (
idCarrera int,
numeroCaballo int not null,
NombreCaballo varchar(20) not null,
Puesto int,
totalApostado int not null,
CONSTRAINT FK_idCarrera FOREIGN KEY (idCarrera) REFERENCES CARRERAS (idCarrera)
);
CREATE TABLE CARRERAS (
idCarrera int ,
fecha date not null,
numeroCarrera int not null,
CONSTRAINT PK_User_SL PRIMARY KEY(idCarrera)
);
select * from CARRERAS
INSERT INTO CARRERAS (idCarrera,fecha,numeroCarrera) VALUES (2,'15/10/2019',243)
INSERT INTO CARRERAS (idCarrera,fecha,numeroCarrera) VALUES (3,'14/10/2019',246)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,99,'ROCKY',1,50)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (3,99,'ROCKY',10,50)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,88,'RYAN',2,300)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (3,88,'RYAN',5,500)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,77,'PEPE',3,800)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,66,'COCO',4,700)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,55,'BLUE',5,7000)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,40,'MIRKO',6,9000)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,44,'POBRETON',99,20)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (3,44,'POBRETON',99,400)
En el Having no tiene sentido poner MENOR IGUAL dado que siempre va a tener que ser igual.
Si yo agrego un caballo que se llama "pobreton" al cual le apostamos menos que a "ROCKY" (el cual salio primero) y le apostaron "POCO" entonces la query no va a traer nada... porque POBRETON tendria le menor apuesta y lo que le apostaorn a rocky es mayor.
Si le agregamos 400 a pobreton entonces ahi sobrepasa a rocky, teniendo asi rocky lo menor apostado y devolviendo ESE valor en el having.. es como que el having dice "este caballo que salio primero posee lo menor que se le aposto en la vida del sistema?" y si la respuesta es "si" entonces lo devuelve en la consulta.
Le borré el filtor del dia asi funcionaba
abrazo.
Edit: Aprobada el dia 11/12/19 !!!!! gracias Pablit por tu resumen y Manurocck !
19 finales de practica me hice. No se lo deseo a nadie.