2011-10-24 55 views
0

我想執行一個簡單的SQL查詢,但無法設法正確。SQL簡單SUBSELECT

(很抱歉的例子,這是所有我能想到的,說明我的問題)

比方說,我有一個表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 ...如果我在上面的SELECT中有Day_Id,那麼它會累加很多行......我嘗試了SUBSELECT,EXISTS但顯然做錯了!

你們能幫我一下嗎?

+0

你正在使用哪個數據庫? MySQL的?甲骨文? Postgres的? – Bohemian

+0

我編輯添加這個信息,但被編輯後面......這是Sql Server ... –

+0

@AndyM,標籤被添加爲Sql-server –

回答

1
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

+0

謝謝,這很完美! –