大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用分析函数row_number() over (partition by ... order by ...)给记录进行分组编号,按人员id和考勤日期进行分组(如果考勤日期带时分秒,需先截断到日),按时间升序排序;这样,就得到人员ID在同一考勤日期下的编号值(编号值是从1开始的),然后,只取编号值为1的记录。
专注于为中小企业提供做网站、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业乌海免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
SQL类似:
select s.id, s.name, s.date, s.card_time
from (
select d.id, d.name, d.date, d.card_time,
row_number() over (partition by d.id, d.date order by d.card_time) as row_idx
from data_table d
) s
where s.row_idx = 1
怎么看数据都有点问题,不过仔细看一下似乎发现一些逻辑
建议还需要增加一个表
我发现逻辑如下表:
比如建立一个部门表,名字叫department,
(如果有就不建立了,你自己看着办)
对应数据如下:
id deptname
B1 业务一部
B2 业务二部
C1 人事部
C2 财务部
C3 总务部
D0 市场营销部
D1 市场营销部(有两个)
语句就这样写吧
SELECT * FROM 员工表 LEFT JOIN 部门表 ON 员工表.departmentid=部门表.id LEFT JOIN departent ON left(部门表.department,2)=departent.id
这个非常简单
首先你是要查询各个不同的,就需要用到group by .
然后是取最后的记录时间点,你就需要用到 max()函数
select userid as 卡号,holeid as 记录点,max(recodetime) as 记录时间 from kaoqin
group by userid,holeid
就这样就行了,其实SQL把需求分开来看很好写的。望楼主采纳!