对于Weight
中具有相同值的行,我想在table3中选择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中的第2行和第5行。
PS 我在mssql中这样做。
PPS 我知道如果标题不合适,但我不知道如何制定好标题。
答案 0 :(得分: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 :(得分: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的语法,如果您不使用它,请在互联网上查找您的语法应该几乎相同