我试图从我从2个表创建的视图中获取不同的数据
我有一个包含以下数据的视图
emplid date_and_time cardreader empl_first_name empl_last_name
845 2017-12-12 08:38:02.000 GH-ENTRY-01 Amanda Gill
61811 2017-12-12 08:38:00.000 GH-ENTRY-02 Julie Moore
61618 2017-12-12 08:36:02.000 GH-ENTRY-01 THOMAS HOEY
62094 2017-12-12 08:36:01.000 GH-EXIT-03 Mikaela Dawson
56481 2017-12-12 08:35:00.000 GH-ENTRY-02 Chase Bennett
5134 2017-12-12 08:33:02.000 GH-ENTRY-05 Martin Byron
51532 2017-12-12 08:33:01.000 GH-ENTRY-05 Gary Brennan
61996 2017-12-12 08:32:04.000 GH-ENTRY-05 Dylan Roberts
58447 2017-12-12 08:32:03.000 GH-ENTRY-05 Michael Guy
61931 2017-12-12 08:32:01.000 GH-EXIT-01 Mark Gibbs
61991 2017-12-12 08:32:00.000 GH-EXIT-02 James Keysell
41932 2017-12-12 08:31:00.000 GH-ENTRY-05 Mark Sadowski
40437 2017-12-12 08:27:01.000 GH-ENTRY-05 John Manning
62094 2017-12-12 08:27:00.000 GH-ENTRY-01 Mikaela Dawson
62094 2017-12-12 08:25:01.000 GH-EXIT-01 Mikaela Dawson
61758 2017-12-12 08:25:00.000 GH-ENTRY-02 Deries Gordon
62094 2017-12-12 08:24:01.000 GH-ENTRY-01 Mikaela Dawson
51532 2017-12-12 08:24:00.000 GH-EXIT-05 Gary Brennan
61067 2017-12-12 08:23:02.000 GH-ENTRY-05 Matthew Hutchinson
61185 2017-12-12 08:23:01.000 GH-ENTRY-05 Brendan Mckew
61991 2017-12-12 08:21:01.000 GH-ENTRY-02 James Keysell
我想获取每个emplid
的最新记录
所以上面的查询为我提供了数据order by date_and_time desc
但emplid
列会有重复
所以我需要选择不同的emplid
,如下所示
Select distinct emplid
from [EBI_Interface].[dbo].[GateTimes_EmployeeNames]
如何将其传递给第一个查询,以便仅获取最近日期的不同emplid
?
答案 0 :(得分:0)
这是一种方法:
select e.*
from [EBI_Interface].[dbo].[GateTimes_EmployeeNames] e
where e.datetime = (select max(e2.datetime)
from [EBI_Interface].[dbo].[GateTimes_EmployeeNames] e2
where e2.emplid = e.emplid
);
规范解决方案是使用row_number()
,但我认为SQL Server在优化此查询方面做得更好(使用正确的索引)。
答案 1 :(得分:0)
select e1.*
from [EBI_Interface].[dbo].[GateTimes_EmployeeNames] e1
join (select e21.emplid, max(e21.date_and_time) 'dt'
from [EBI_Interface].[dbo].[GateTimes_EmployeeNames] e21
group by e21.emplid
) e2 on e1.emplid=e2.emplid and e1.date_and_time=e2.dt
如果你想以其他方式写它