Reputation: 11
I have a working query to extract the minimum time of every athlete in every distance in the table "Tempi". These is a simple group by query , grouping the results by athleteID and distanceID and selecting the Minimum time. But I need now to know where and when this times are obtained. This data are in another table named "Manif". The two tables are joined by the ManifID, present in both tables. How can I retrieve the date and the city of the time? Thanks!
Working query
SELECT
[02_tEMPI].CodSpec,
[04_Spec].DescrSpecShort,
Min([02_Tempi].Tempo) AS MinDiTempo
FROM
[04_Spec]
INNER JOIN [03_Manif]
INNER JOIN [02_Tempi]
ON [03_Manif].IDManif = [02_Tempi].CodManif
ON [04_Spec].CodSpec = [02_Tempi].CodSpec
WHERE
[02_Tempi].CodAtleta=@CodAtleta AND
[03_Manif].Base = @Base
GROUP BY
[04_Spec].DescrSpecShort,
[02_Tempi].CodSpec
HAVING
[02_Tempi].CodSpec <'60'
ORDER BY
[02_Tempi].CodSpec
Tempi Table Structure
CREATE TABLE [dbo].[02_Tempi] (
[IDRisu] BIGINT NOT NULL,
[CodAtleta] VARCHAR (12) NULL,
[CodSpec] VARCHAR (4) NULL,
[CodManif] INT NULL,
[Note] VARCHAR (14) NULL,
[CodSocContingente] VARCHAR (14) NULL,
[Cat] VARCHAR (5) NULL,
[CatFIN] VARCHAR (4) NULL,
[CatPrimato] INT NULL,
[Elaborato] SMALLINT NULL,
[Tempo] VARCHAR (8) NULL,
CONSTRAINT [PK__02_Tempi] PRIMARY KEY CLUSTERED ([IDRisu] ASC)
mANIF TABLE STRUCTURE
CREATE TABLE [dbo].[03_Manif] (
[IDManif] INT NOT NULL,
[DescrManif] VARCHAR (100) NULL,
[LuogoManif] VARCHAR (50) NULL,
[Base] SMALLINT NULL,
[LinkPDF] VARCHAR (250) NULL,
[Data] VARCHAR (10) NULL,
CONSTRAINT [PK__03_Manif] PRIMARY KEY CLUSTERED ([IDManif] ASC)
);
Thanks
Upvotes: 0
Views: 396
Reputation: 35790
I think you can do this row_number
window function:
;
WITH cte
AS ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY [04_Spec].DescrSpecShort,
[02_Tempi].CodSpec ORDER BY [02_Tempi].Tempo ) AS rn
FROM [04_Spec]
INNER JOIN [02_Tempi] ON [04_Spec].CodSpec = [02_Tempi].CodSpec
INNER JOIN [03_Manif] ON [03_Manif].IDManif = [02_Tempi].CodManif
WHERE [02_Tempi].CodAtleta = @CodAtleta
AND [03_Manif].Base = @Base
AND [02_Tempi].CodSpec < '60'
)
SELECT *
FROM cte
WHERE rn = 1
Upvotes: 2
Reputation: 1298
A potential approach
Using that ManifID to join with your Manif table.
SELECT
Min(T1.Tempo) [Fastest Tempo],
T1.AthleteID,
T1.DistanceID,
SUBT.ManifID
FROM [02_Tempi] T1
CROSS APPLY
(
SELECT TOP 1 T2.ManifID
FROM [02_Tempi] T2
WHERE T2.AthleteID = T1.AthleteID
AND T2.DistanceID = T1.DistanceID
ORDER BY T2.Tempo DESC --add other differentiating columns if necessary
) SUBT
JOIN [03_Manif] M
ON SUBT1.ManifID = M.ManifID
GROUP BY
T1.AthleteID,
T1.DistanceID,
SUBT.ManifID
Upvotes: 0