创建 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' 权重,则首先取最近日期的那个。
我想根据这三个 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' 权重,则首先取最近日期的那个。