jeatyn的gravatar头像
jeatyn 2016-09-05 22:43:49

MySQL怎么查询每天打卡的最早时间和最晚时间?

首先由三个表:
第一个表:lipa_staff_base_info,字段:id,name,phone,imsi,sex。
第二个表:lipa_ueimsi_status,字段:id,enb_name,imsi,add_time。
第三个表:lipa_enb_leave_message,字段:id,enb_name,imsi,,leave_time。
三个表通过imsi作为关联,add_time字段中最早时间作为开始时间,leave_time字段中最晚时间作为结束时间。

SELECT c.`name` AS name,c.`phone` AS phone,c.`imsi` AS imsi, MIN(b.`add_time`) AS beginTime
FROM lipa_staff_base_info c, lipa_ueimsi_status b 
WHERE b.`imsi`=c.`imsi` GROUP BY DATE_FORMAT(b.`add_time`,'%Y-%c-%d');
这个语句能求出每天最早时间。

SELECT c.`name` AS name,c.`phone` AS phone,c.`imsi` AS imsi, MAX(a.`leave_time`) AS endTime
FROM lipa_staff_base_info c, lipa_enb_leave_message a 
WHERE a.`imsi`=c.`imsi` GROUP BY DATE_FORMAT(a.`leave_time`,'%Y-%c-%d');
这个语句能求出每天最晚时间。

我想要的是能够一条语句能查询出最早时间和最晚时间。请大家帮个忙。或者这个我写的这个语句,还有没有其他的方法?

所有回答列表(4)
shengrm的gravatar头像
shengrm  LV2 2016年9月6日

min(add_time)

max(leave_time)就可以啦

偷颗菜抱回家的gravatar头像
偷颗菜抱回家  LV14 2016年9月7日

试试这个:

select t1.name,t1.phone,t1.imsi,t1.beginTime,t2.endTime 
from (SELECT c.`name` AS name,c.`phone` AS phone,c.`imsi` AS imsi, MIN(b.`add_time`) AS beginTime
FROM lipa_staff_base_info c, lipa_ueimsi_status b 
WHERE b.`imsi`=c.`imsi` GROUP BY DATE_FORMAT(b.`add_time`,'%Y-%m-%d'),c.`imsi`) t1 left join (
SELECT c.`name` AS name,c.`phone` AS phone,c.`imsi` AS imsi, MAX(a.`leave_time`) AS endTime
FROM lipa_staff_base_info c, lipa_enb_leave_message a 
WHERE a.`imsi`=c.`imsi` GROUP BY DATE_FORMAT(a.`leave_time`,'%Y-%m-%d'),c.`imsi`
) t2 on t2.imsi = t1.imsi and DATE_FORMAT(t2.endTime,'%Y-%m-%d') = DATE_FORMAT(t1.beginTime,'%Y-%m-%d')
union
select t1.name,t1.phone,t1.imsi,t1.beginTime,t2.endTime 
from (SELECT c.`name` AS name,c.`phone` AS phone,c.`imsi` AS imsi, MIN(b.`add_time`) AS beginTime
FROM lipa_staff_base_info c, lipa_ueimsi_status b 
WHERE b.`imsi`=c.`imsi` GROUP BY DATE_FORMAT(b.`add_time`,'%Y-%m-%d'),c.`imsi`) t1 right join (
SELECT c.`name` AS name,c.`phone` AS phone,c.`imsi` AS imsi, MAX(a.`leave_time`) AS endTime
FROM lipa_staff_base_info c, lipa_enb_leave_message a 
WHERE a.`imsi`=c.`imsi` GROUP BY DATE_FORMAT(a.`leave_time`,'%Y-%m-%d'),c.`imsi`
) t2 on t2.imsi = t1.imsi and DATE_FORMAT(t2.endTime,'%Y-%m-%d') = DATE_FORMAT(t1.beginTime,'%Y-%m-%d')

挑逗乐的gravatar头像
挑逗乐  LV8 2016年9月8日

根据当天时间查询,获取当天的打卡记录并降序排序,取集合第一条和最后一条数据,

晚归客的gravatar头像
晚归客  LV5 2016年9月18日

按天查询,降序排列,然后取第一条和最后一条

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友