如何从每个学生的第二个最新记录中获取数据?

时间:2015-03-24 20:13:36

标签: sql sql-server-2012

在学区工作我有一个数据库,其中包含有关学生的信息。教育计划。我使用Management Studio访问SQL Server 2012数据库。我需要从最近的第二个计划中获取信息。这是专栏。

  • 数据库名称为PlansAnoka
  • 表名为dbo.plans

列:

  • PlanID(主键)
  • StudentID(这些对于每个学生都是独一无二的)
  • PlanDate(这是我想用作第二张最新记录日期的专栏。
  • Meeting Date(这只是我需要的另一个数据点)

我知道如何创建查询以获取最新的查询,但不知道最近的第二个查询。我需要第二个最近的记录为每个学生。任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

使用ROW_NUMBER功能和分区StudentID

WITH A AS
(
  SELECT 
    StudentID , 
    PlanDate ,
    MeetingDate,
    ROW_NUMBER() OVER(PARTITION BY StudentID ORDER BY PlanDate DESC) rownum
  FROM dbo.plans
) 
SELECT * FROM a
WHERE rownum=2 

答案 1 :(得分:1)

如果您想获得row_number记录,请使用n'th

select * from 
(select studentid , 
 plandata ,
 row_number() over(partition by plandata order by plandata desc) rn
from dbo.plans) t
where t.rn=2 -- or n

答案 2 :(得分:0)

请试试这个:

select * from
    (select *, row_number() over (partition by StudentID order by PlanDate desc) Rank
     from dbo.plans) p
where p.Rank = 2

参考链接:https://msdn.microsoft.com/en-us/library/ms186734.aspx

答案 3 :(得分:0)

试试这个;

select * from
(
  select *, ROW_NUMBER() 
  over(partition by StudentID order by plandate desc) 
  as Row from dbo.plans
) temp
WHERE temp.Row = 2