SQL-如何选择特定列中具有最大值的数据行?

SQL-如何选择特定列中具有最大值的数据行?,sql,sql-server,tsql,Sql,Sql Server,Tsql,在测试SQL查询以准备创建视图的过程中,我首先想到了以下公式 select a.SchID as [SchID], b.CourseID as [CourseID], a.EmpNo as [EmpNo], b.ActStartDate as [ActStartDate], a.ValidTo as [ValidTo] from [SQL3].[dbo].[Training_Record] a inner join (select z.schid, z.CourseID as [C

在测试SQL查询以准备创建视图的过程中,我首先想到了以下公式

select a.SchID as [SchID],  b.CourseID as [CourseID], a.EmpNo as [EmpNo], 
   b.ActStartDate as [ActStartDate], a.ValidTo as [ValidTo]
from [SQL3].[dbo].[Training_Record] a inner join 

(select z.schid, z.CourseID as [CourseID],max(z.ActStartDate) as [ActStartDate]
from [SQL3].[dbo].[Training_Schedule] z group by z.SchID, z.CourseID)as b

    on a.SchID = b.SchID 

-- to test data content
where EmpNo = '141281' and CourseID = '22'
结果给了我两行:

| SchID | CourseID | EmpNo |       ActStartDate      |         ValidTo         |
--------------------------------------------------------------------------------
| 5000  |    22    | 14000 | 2018-06-11 00:00:00.000 | 2018-12-10 00:00:00.000 |
| 5022  |    22    | 14000 | 2018-08-08 00:00:00.000 | 2019-02-07 00:00:00.000 |
我想让第二排(ActStartDate是最大的)成为唯一出现的一排

| SchID | CourseID | EmpNo |       ActStartDate      |         ValidTo         |
--------------------------------------------------------------------------------
| 5022  |    22    | 14000 | 2018-08-08 00:00:00.000 | 2019-02-07 00:00:00.000 |

但是由于SCID有不同的编号,它最终注册为单独的条目。SchID是这两个表中唯一共享的列,那么我如何告诉SQL忽略SchID读取并只显示第二行?

您可以在下面尝试使用子查询

select a.SchID as [SchID],  b.CourseID as [CourseID], a.EmpNo as [EmpNo], 
   b.ActStartDate as [ActStartDate], a.ValidTo as [ValidTo]
from [SQL3].[dbo].[Training_Record] a 
inner join

(select z.schid, z.CourseID as [CourseID],max(z.ActStartDate) as [ActStartDate]
from [SQL3].[dbo].[Training_Schedule] z group by z.CourseID)as b
on a.SchID = b.SchID 

where EmpNo = '141281' and CourseID = '22' and 
b.ActStartDate in (select max([ActStartDate]) from [SQL3].[dbo].[Training_Schedule] z1 where b.courseid=z1.courseid group by z1.courseid)
或者您可以尝试使用
row\u number()


什么是数据库管理系统?标记它。请提供您期望的样本结果。使用SSMS进行测试。哇。。。以前从未想过使用SQL语句获取特定值。谢谢。但举例来说,我想让表格显示所有数据,其中包含唯一的
CourseID
&
EmpNo
和max
ActStartDate
组合。那我该怎么办?我明白了。然后我有另一个更大的问题与此相关,因为这是视图构建的第1阶段。我完成了最后阶段,我有一些问题要问。我将在另一个问题中发布它。介意看看吗?谢谢
select * from 
(
select a.SchID as [SchID],  b.CourseID as [CourseID], a.EmpNo as [EmpNo], 
   b.ActStartDate as [ActStartDate], a.ValidTo as [ValidTo],row_number() over(partition by b.courseid order by b.ActStartDate desc) as rn
from [SQL3].[dbo].[Training_Record] a inner join 

(select z.schid, z.CourseID as [CourseID],max(z.ActStartDate) as [ActStartDate]
from [SQL3].[dbo].[Training_Schedule] z group by z.SchID, z.CourseID)as b

    on a.SchID = b.SchID 

-- to test data content
where EmpNo = '141281' and CourseID = '22'
)A where rn=1