根据不同字段中的最新值选择所有唯一名称

时间:2014-06-14 07:32:59

标签: sql ms-access

我有一个带有名为SicknessLog的表的访问数据库。字段是ID,StaffName,[Start / Return],DateStamp。

当一名工作人员因疾病而下班时,会在表格中添加一条记录,并且[开始/返回]字段中的值为1.当他们返回工作时,会添加一条新记录,但相同的详细信息除外[Start / Return]字段为0.

我正在尝试编写一个查询,该查询将返回所有不同的员工姓名,其中该人员的最新记录的值为1(即所有仍然生病的员工)

有人知道这是否可行?提前致谢

4 个答案:

答案 0 :(得分:1)

这是一种方式,所有工作人员生病的地方都不存在事件之后,工作人员“不合时宜”:

select distinct x.staffname 
from sicknesslog x
where Start/Return = 1
  and not exists (
     select 1 
     from sicknesslog y
     where x.StaffName = y.StaffName
       and y.DateStamp > x.DateStamp
       and y.Start/Return = 0
  )

答案 1 :(得分:0)

 select staffname,MAX(datestamp)
    from sicknesslog 
    where [start/return]=1 
group by staffname
    order by max(datestamp) desc,staffname

这将检索生病和下班的最新记录

答案 2 :(得分:0)

您可以使用group by来实现此目的。

从病态日志中选择staffname,max(datestamp),其中start / return = 1 group by staffname

它将返回所有最新的所有员工。如果ID列是自动生成PK,那么您可以在max函数中使用它。

答案 3 :(得分:0)

这应该是关闭的:

select s.StaffName, s.DateStamp, s.[Start/Return]
from SicknessLog s
left join (
    select StaffName, max(DateStamp) as MaxDate
    from SicknessLog
    group by StaffName
) sm on s.StaffName = sm.StaffName and s.DateStamp = sm.MaxDate and s.[Start/Return] = 1