2015-09-20 44 views
0

我要創造我的數據庫視圖,基於這三個表的值: enter image description here創建SQL視圖,其中選擇取決於兩列

我想在具有表3來選擇行Weight中的最大值,對於Count中具有相同值的行。

然後,我希望他們按Category_ID分組,並按Date排序,這樣如果table3中的兩行相同,我想要最新的。

讓我給你舉個例子:

表1

ID | Date  | UserId 
1 | 2015-01-01 | 1 
2 | 2015-01-02 | 1 

表2

ID | table1_ID | Category_ID 
1 | 1   | 1 
2 | 2   | 1 

表3

ID | table2_ID | Count | Weight 
1 | 1   | 5  | 10 
2 | 1   | 5  | 20  <-- count is 5 and weight is highest 
3 | 1   | 3  | 40  
4 | 2   | 5  | 10 
5 | 2   | 3  | 40  <-- newest of the two equal rows 

那麼結果應該是從表3

PS我在MSSQL做這行2和5。

PPS我是sory,如果標題不合適,但我不知道如何制定一個好的。

+0

你到目前爲止嘗試過什麼。對於具有相同計數值的行,「重量最高值」是什麼意思? – JBond

+0

@JBond英語不是我的主要語言。我不知道如何解釋我的意思,這就是爲什麼我添加了這個例子。我沒有嘗試太多,因爲我不確定從哪裏開始。 –

+0

@a_horse_with_no_name MSSQL。我在我的問題中提到過它 –

回答

2
SELECT 
    * 
FROM 
(
    SELECT 
     t3.* 
     ,RANK() OVER (PARTITION BY [Count] ORDER BY [Weight] DESC, Date DESC) highest 
    FROM TABLE3 t3 
    INNER JOIN TABLE2 t2 ON t2.Id = t3.Table2_Id 
    INNER JOIN TABLE1 t1 ON t1.Id = t2.Table1_Id 
) t 
WHERE t.Highest = 1 

這將由計數組(必須是相同的)。然後它將確定哪一個具有最高的重量。如果其中兩個更高的體重具有相同的「最高」分量,則最先選擇最近的分數。

1

您可以使用RANK()分析函數這裏,並給這些行的排名,比選擇每個ID

喜歡的東西

select * 
from 
    (select 
     ID, table2_ID, Count, Weight, 
     RANK() OVER (PARTITION BY ID ORDER BY Count, Weight DESC) as Highest 
    from table3) 
where Highest = 1; 

這第一級是Oracle的語法,如果你不使用它在互聯網上看你的語法應該幾乎相同

相關問題