2017-06-21 31 views
0

我的数据集具有以下格式;从Mysql中的表中选择唯一的组合

Student_id Month Year Amount 
1   Jan 2010 600 
1   Feb 2010 391 
1   Apr 2010 673 
1   Jul 2010 564 
5   Jan 2010 789 
5   Mar 2011 298 
5   Aug 2010 347 
7   Jan 2010 654 
7   Dec 2011 621 
7   Apr 2010 450 
7   Nov 2011 980 

... &等。

我希望我的输出将有每个唯一的id-month-year组合的最大金额。

Student_id Month Year Amount 
1   Apr 2010 673 
5   Jan 2010 789 
7   Nov 2011 980 

... &这样子。

如何使用SQL获取输出?我试图

select distinct * , MAX(Amount) from student_details; 

&

SELECT *, MAX(Amount) 
FROM student_details 
WHERE Amount IN 
(
    FROM student_details 
    GROUP BY Student_ID, Year, Month 
); 

但输出是不理想的。

请建议协助。提前致谢。

回答

0

只需使用以下查询

第一选择量一个月为每个用户然后选择的数据已经选择的月份

SELECT * FROM table WHERE amount IN (
    SELECT max(amount) FROM table group by student_id 
) 
+1

不会工作如果两名学生的金额相同,一名学生的金额最大,其他学生金额不是最大的! – Luv

1

在MySQL:

SELECT t0.* 
FROM student_details AS t0 
LEFT JOIN student_details AS t1 ON t0.Student_id=t1.Student_id t1.Amount>t0.Amount 
WHERE t1.Student_id IS NULL; 

在SQL服务器:

SELECT T.Student_id,T.Month,T.Year,T.Amount 
FROM 
(
    SELECT *,row_number() over (PARTITION BY Student_ID ORDER BY Amount DESC) as RN 
    FROM student_details 
)T 
WHERE T.RN=1