创建 sql 视图,其中 select 取决于两列的值

Creating sql view where the select is dependent on the value of two columns

我想根据这三个 table 在我的数据库中创建一个视图:

我想要 select table3 中在 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

那么结果应该是 table 3.

的第 2 行和第 5 行

PS 我在 mssql 中这样做。

PPS 标题不合适请见谅,不知道怎么写才好

您可以在这里使用 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 的语法,如果您不使用它,请在互联网上查找您的语法,它应该几乎相同

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

这将按计数(必须相同)分组。然后它将确定哪个具有最高权重。如果其中两个以上具有相同的 'heighest' 权重,则首先取最近日期的那个。