Reputation: 1681
The query below seems to work despite being wrong.
The Color
column doesn't belong in an aggregate function but I don't want to group by Color
. I want to return the color for the minimum priority grouped by Vehicle.
I hope the below is enough to work with - I was hoping for a quick answer but will go into more detail if necessary.
SELECT alert.VehicleID,
min(hotcol.[Priority]) as [Priority]
min(hotcol.Color) as Color,
FROM [ALERTS] alert
INNER JOIN [HOTLISTS] hotlist ON alert.[HotlistID] = hotlist.[HotlistID]
INNER JOIN [HOTLIST_COLORS] hotcol ON hotlist.ColorID = hotcol.ColorID
WHERE VehicleID = 17513851
GROUP BY alert.VehicleID
Upvotes: 2
Views: 63
Reputation: 79929
You can use the ranking function ROW_NUMBER
to do this. Something like this:
WITH CTE
AS
(
SELECT
alert.VehicleID,
hotcol.Color,
hotcol.[Priority],
ROW_NUMBER() OVER(PARTITION BY alert.VehicleID
ORDER BY hotcol.[Priority]) AS RN
FROM [ALERTS] alert
INNER JOIN [HOTLISTS] hotlist ON alert.[HotlistID] = hotlist.[HotlistID]
INNER JOIN [HOTLIST_COLORS] hotcol ON hotlist.ColorID = hotcol.ColorID
WHERE VehicleID = 17513851
)
SELECT
VehicleID,
Color,
[Priority]
FROM CTE
WHERE rn = 1;
The ROW_NUMBER
function will give a ranking number for each alert.VehicleID
and each group will be ordered by priority
. Then WHERE rn = 1
will filter out all the rows except the minimum one which has rn = 1
.
Upvotes: 1