我有下表
Name Subject Month Year
----- ----------- ----- ----
Raju History 1 2011
Ravi Chemistry 10 2010
Raju Computers 12 2011
Raju Physics 10 2010
Raju English 6 2011
Ravi Mathematics 10 2010
Sunil English 5 2011
Raju History 5 2011
Raju History 6 2011
我希望结果如下
Name Subject Latest_Month_Attended Latest_Year_Attended
----- ----------- --------------------- --------------------
Raju History 6 2011
Raju Computers 12 2011
Raju Physics 10 2010
Raju English 6 2011
Ravi Chemistry 10 2010
Ravi Mathematics 10 2010
Sunil English 5 2011
我想找到特定学生和主题的最新月份和年份
请帮助我获得上述结果
答案 0 :(得分:3)
试试这个(已编辑):
select t1.Name, t1.Subject, max(month) as Latest_Month_Attended, t2.year as Latest_Year_Attended
from tab t1
join (
select Name, Subject, max(year) as year
from tab
group by Name, Subject
) t2 on t1.name = t2.name and t1.subject = t2.subject and t1.year = t2.year
group by t1.Name, t1.Subject, t2.year
答案 1 :(得分:1)
WITH
ranked_data AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY Name, Subject ORDER BY Year, Month) AS Rank,
*
FROM
yourTable
)
SELECT
*
FROM
ranked_data
WHERE
Rank = 1
但是,如果将年/月值合并到一个日期字段中 - 一切都变得简单得多......
SELECT Name, Subject, MAX(Date) FROM yourTable GROUP BY Name, Subject
您可以使用以下内容将日期舍入为一个月:
- DATEADD(month, 0, DATEDIFF(month, 0, <any date-time>))
虽然存在相反的情况,但我的经验通常是不打破日期,而是将其保留为单个字段。
答案 2 :(得分:-1)
一个解决方案:
select Name, Subject, Month as Latest_Month_Attended, Year as Latest_Year_Attended
from tab
group by Name, Subject
having
max( month) and max(Year);
结果:
Name Subject Latest_Month_Attended Latest_Year_Attended
---------- ---------- --------------------- --------------------
Raju Computers 12 2011
Raju English 6 2011
Raju History 6 2011
Raju Physics 10 2010
Ravi Chemistry 10 2010
Ravi Mathematic 10 2010
Sunil English 5 2011