SQL просто SUBSELECT - PullRequest
       14

SQL просто SUBSELECT

0 голосов
/ 24 октября 2011

Я хочу выполнить простой SQL-запрос, но не могу понять, как правильно.

(извините за пример, это все, что я мог придумать, чтобы проиллюстрировать мою проблему)

Допустим, у меня есть таблица FooBar , которая содержит X столбцов, но только 3 полезных для меня столбца.

DogKind_Id, FoodQuantity, Day_Id

И я хочу знать, для каждого DogKind_Id, какой был день, когда FoodQuantity был максимальным! Так для таблицы FooBar, например:

DogKind_Id, FoodQuantity, Day_Id 
1,2, 2
1,10,1
1,4,5
2,3, 3
2,9,1
2,87,5
3,0, 3
3,0,2
3,1,6

Результат моего запроса будет:

DogKind_Id, Day_Id
1,1
2,5
3,6

Пока мне удалось это сделать:

SELECT DogKind_Id, MAX(FoodQuantity)
FROM FooBar
GROUP BY DogKind_Id

Но я не могу просто использовать этот результат, чтобы получить Day_Id ... Если у меня был Day_Id в приведенном выше SELECT, он складывает много строк ... Я пробовал SUBSELECT, EXISTS, но, очевидно, делал это неправильно!

Можете ли вы, ребята, помочь мне немного?

1 Ответ

1 голос
/ 24 октября 2011
SELECT parent.DogKind_id, parent.Day_Id
FROM FooBar AS parent
INNER JOIN (
    SELECT DogKind_Id, MAX(FoodQuantity) AS Max
    FROM FooBar
    GROUP BY DogKind_Id
) AS child ON (parent.DogKind_Id=child.DogKind_Id) AND (parent.FoodQuantity = child.Max)

По сути, внутренний запрос - это ваша версия, которая получает значения id / max. Затем к этому подзапросу присоединяется внешний запрос, чтобы выяснить, КАКОЕ из записей имеет такое максимальное количество продуктов, так что вы можете получить связанный dayid

...