创建sql视图,其中select依赖于两列的值

创建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

我想基于以下三个表在数据库中创建一个视图:

我想选择表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
表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是一匹没有名字的马。我在问题中提到过