我有一个带有名为SicknessLog的表的访问数据库。字段是ID,StaffName,[Start / Return],DateStamp。
当一名工作人员因疾病而下班时,会在表格中添加一条记录,并且[开始/返回]字段中的值为1.当他们返回工作时,会添加一条新记录,但相同的详细信息除外[Start / Return]字段为0.
我正在尝试编写一个查询,该查询将返回所有不同的员工姓名,其中该人员的最新记录的值为1(即所有仍然生病的员工)
有人知道这是否可行?提前致谢
答案 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