在数据库中取多条记录中的第一条与最后一条记录的问题!

时间:2021-12-28 23:35:20
在考勤方面,如果一个人打卡多次,但取数据时只取第一次打卡的时间与最后一次的时间为有效时间,sql语句应该如何去写!多谢!

6 个解决方案

#1


select min([time]) as 第一次打卡,max([time]) as 最后一次打卡 from tab

#2



select * from t  a
where 打卡時間=(select min(打卡時間) from t where a.工號=工號)
or
      打卡時間=(select max(打卡時間)from t where a.工號=工號)

#3


select * from t  a
where 打卡時間=(select min(打卡時間) from t where a.工號=工號 and 打卡时间>软件设置时间)
or
      打卡時間=(select max(打卡時間)from t where a.工號=工號 and 打卡时间>软件设置时间)

#4


在考勤方面,如果一个人打卡多次,但取数据时只取第一次打卡的时间与最后一次的时间为有效时间,sql语句应该如何去写!多谢!

select id , min(打卡时间) 第一次打卡的时间 , max(打卡时间) 最后一次的时间 from tb group by id

#5


我个人认为应该包含日期.

select id , convert(varchar(10),日期,120) 日期 , min(打卡时间) 第一次打卡的时间 , max(打卡时间) 最后一次的时间 from tb group by id , convert(varchar(10),日期,120)

#6


谢谢大家的指引,你们说的意思我还是清楚,问题在于如果是一个月的所有记录,但每天都应分析出每一个人的打卡情况,那日期从月前到月末怎么去遍历呢(也就是说用SQL语句怎么才能得到从1号到31号的日期)!谢谢!

#1


select min([time]) as 第一次打卡,max([time]) as 最后一次打卡 from tab

#2



select * from t  a
where 打卡時間=(select min(打卡時間) from t where a.工號=工號)
or
      打卡時間=(select max(打卡時間)from t where a.工號=工號)

#3


select * from t  a
where 打卡時間=(select min(打卡時間) from t where a.工號=工號 and 打卡时间>软件设置时间)
or
      打卡時間=(select max(打卡時間)from t where a.工號=工號 and 打卡时间>软件设置时间)

#4


在考勤方面,如果一个人打卡多次,但取数据时只取第一次打卡的时间与最后一次的时间为有效时间,sql语句应该如何去写!多谢!

select id , min(打卡时间) 第一次打卡的时间 , max(打卡时间) 最后一次的时间 from tb group by id

#5


我个人认为应该包含日期.

select id , convert(varchar(10),日期,120) 日期 , min(打卡时间) 第一次打卡的时间 , max(打卡时间) 最后一次的时间 from tb group by id , convert(varchar(10),日期,120)

#6


谢谢大家的指引,你们说的意思我还是清楚,问题在于如果是一个月的所有记录,但每天都应分析出每一个人的打卡情况,那日期从月前到月末怎么去遍历呢(也就是说用SQL语句怎么才能得到从1号到31号的日期)!谢谢!