首页 新闻 会员 周边

SQL查询问题:根据user_code, 取到每一个用户的最后打卡时间

0
悬赏园豆:50 [已解决问题] 解决于 2017-12-07 17:31

image_1c0o0ha2smjblbp1q6t1mn6uai9.png-87.8kB

我是通过上面这种方式,取到的员工的最后打卡时间。
<br/>
<font color="red">但如果,有很多员工,我要获取他们每一个人的最后一次打卡时间呢?</font>

image_1c0o0macj18j012up1o2n1729momm.png-241.6kB

SQL
Yoooshiki的主页 Yoooshiki | 初学一级 | 园豆:3
提问于:2017-12-07 16:19
< >
分享
最佳答案
0

select user_code,max(clock_in_time) from tb_vp_clock_in group by user_code

收获园豆:40
何校萍 | 菜鸟二级 |园豆:214 | 2017-12-07 17:19

感谢,陷入思维误区了,总想着把查询条件放到where后

Yoooshiki | 园豆:3 (初学一级) | 2017-12-07 17:31
其他回答(4)
0

根据时间拍下序  根据usercode取第一条数据就行了

IT小白鸽 | 园豆:-2 (初学一级) | 2017-12-07 16:21

这样的

支持(0) 反对(0) IT小白鸽 | 园豆:-2 (初学一级) | 2017-12-07 16:25

@IT小白鸽: 这样不行,只会出来一条数据:

image_1c0o1dcna1f76165l15hb1e7a1o299.png-19.5kB

支持(0) 反对(0) Yoooshiki | 园豆:3 (初学一级) | 2017-12-07 16:28
0

分组求最大值,group by usercode 

西漠以西 | 园豆:1675 (小虾三级) | 2017-12-07 16:28

我尝试过分组,但是对应的打卡时间并不是最后的打卡时间啊

支持(0) 反对(0) Yoooshiki | 园豆:3 (初学一级) | 2017-12-07 16:43

正解,需要按usercode 和 create_time的年月日进行分组,然后查询min,max.

另外建议不要使用in,in的效率低下,使用in意味着需要全表扫描,直接用usercode=?

支持(0) 反对(0) yhdino | 园豆:701 (小虾三级) | 2017-12-07 16:49

@Yoooshiki: 

你的数据中打卡日期和时间和合并存储在同一列的,也就是说没有单独的 日期列。

而你的需求是要获取每个用户在每天最后一次打卡的时间。

 

所以,分组时,不仅要使用usercode,还要根据从clock_in_time列中分离出的日期来分组。

参考:“... group by usercode ,convert(char(10),clock_in_time,120) ......”

支持(0) 反对(0) 西漠以西 | 园豆:1675 (小虾三级) | 2017-12-07 17:01
0

支持分组获取日期最大值,然后再关联,获取全部信息

liangzai1996 | 园豆:135 (初学一级) | 2017-12-07 16:45
0

第一次在博客园回复:

1.如果是Oracle:可以使用rownumber_over(partition by column1 order by colomn2)来达到你的要求;

2.如果是Mysql:可以使用一下类似语法:

SELECT 
IF(t1.id = @id,@rownum := @rownum + 1,@rownum := 1)AS rownum,
t1.*,
@id := t1.id
FROM
(SELECT 
@rownum := 0,@id := NULL) r,
test1 t1
ORDER BY t1.id,t1.starttime DESC

语法解析:

以id和starttime进行排序可以理解为id分组内starttime排序;

test1表关联@rownum :=0,@id :=null,在select中if判断@id是否等于当前行的id,因为初始为null,所以@rownum :=1,当id变化的时候,@id还是上一个id的值,此时@rownum重置为1,注意@id :=t1.id一定要放在if判断后面。

 

3.如果是其他数据库,可根据Oracle的语法去自行查找

收获园豆:10
愤怒小书生 | 园豆:246 (菜鸟二级) | 2017-12-07 17:09

朋友,你是大神,可惜看不懂你的sql, 不管怎么说,膜拜

支持(0) 反对(0) Yoooshiki | 园豆:3 (初学一级) | 2017-12-07 17:38

@Yoooshiki:我也只是个小菜鸟,只是比你多飞了一会,这些百度上都是可以搜到的

支持(0) 反对(0) 愤怒小书生 | 园豆:246 (菜鸟二级) | 2018-01-22 16:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册