创建sql视图,其中select依赖于两列的值
我想基于以下三个表在数据库中创建一个视图: 我想选择表3中在创建sql视图,其中select依赖于两列的值,sql,sql-server,sql-view,Sql,Sql Server,Sql View,我想基于以下三个表在数据库中创建一个视图: 我想选择表3中在权重中具有最高值的行,用于在计数中具有相同值的行 然后,我希望它们按类别ID分组,并按日期排序,这样,如果表3中的两行相同,我就需要最新的一行 让我举个例子: 表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
权重中具有最高值的行,用于在计数中具有相同值的行
然后,我希望它们按类别ID
分组,并按日期
排序,这样,如果表3中的两行相同,我就需要最新的一行
让我举个例子:
表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
ID |表2 | ID |计数|重量
1 | 1 | 5 | 10
2 | 1 | 5 | 20您可以在这里使用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的语法,如果您不使用它,请在internet上查找您的语法,您的语法应该几乎相同您可以在此处使用RANK()分析函数,为这些行指定一个秩,然后为每个ID选择第一个秩
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
差不多
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的语法,如果您不使用它,请在internet上查找您的语法,您的语法应该几乎相同您可以在此处使用RANK()分析函数,为这些行指定一个秩,然后为每个ID选择第一个秩
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
差不多
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的语法,如果您不使用它,请在internet上查找您的语法,您的语法应该几乎相同您可以在此处使用RANK()分析函数,为这些行指定一个秩,然后为每个ID选择第一个秩
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
差不多
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的语法,如果您不使用它,请在internet上查找您的语法,您的语法应该几乎相同
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”体重,那么首先是最近约会的那个人
这将按计数分组(计数必须相同)。然后它将确定哪一个具有最高的权重。如果其中两个以上的人有相同的“heighest”体重,那么首先是最近约会的那个人
这将按计数分组(计数必须相同)。然后它将确定哪一个具有最高的权重。如果其中两个以上的人有相同的“heighest”体重,那么首先是最近约会的那个人
这将按计数分组(计数必须相同)。然后它将确定哪一个具有最高的权重。如果其中两个以上的人有相同的“heighest”体重,那么就先选择最近约会的那一个。到目前为止你都试过什么。“对于计数值相同的行,权重值最高”是什么意思?@JBond英语不是我的主要语言。我不知道如何正确地解释我的意思,这就是我添加示例的原因。我没怎么试过,因为我不知道从哪里开始。@MSSQL是一匹没有名字的马。我在我的问题中提到过,到目前为止你都做了些什么。“对于计数值相同的行,权重值最高”是什么意思?@JBond英语不是我的主要语言。我不知道如何正确地解释我的意思,这就是我添加示例的原因。我没怎么试过,因为我不知道从哪里开始。@MSSQL是一匹没有名字的马。我在我的问题中提到过,到目前为止你都做了些什么。“对于计数值相同的行,权重值最高”是什么意思?@JBond英语不是我的主要语言。我不知道如何正确地解释我的意思,这就是我添加示例的原因。我没怎么试过,因为我不知道从哪里开始。@MSSQL是一匹没有名字的马。我在我的问题中提到过,到目前为止你都做了些什么。“对于计数值相同的行,权重值最高”是什么意思?@JBond英语不是我的主要语言。我不知道如何正确地解释我的意思,这就是我添加示例的原因。我没怎么试过,因为我不知道从哪里开始。@MSSQL是一匹没有名字的马。我在问题中提到过