查询结果速度很慢,要2分钟才能出结果,求解
时间:2011-12-05
来源:互联网
set @tyear=2011
set @tmonth=10
select distinct left(convert(varchar,c.checktime,120),10) as mydate,u.userid,u.name,
(select substring(CONVERT(varchar, min(checktime), 120 ),12,5)
from checkinout
where left(CONVERT(varchar, checktime, 120 ),10)=left(convert(varchar,c.checktime,120),10) and userid=u.userid) as mintime,
(select substring(CONVERT(varchar, max(checktime), 120 ),12,5)
from checkinout
where left(CONVERT(varchar, checktime, 120 ),10)=left(convert(varchar,c.checktime,120),10) and userid=u.userid) as maxtime
from checkinout as c,userinfo as u where year(c.checktime)=@tyear and month(c.checktime)=@tmonth order by u.userid,mydate
作者: lining0755 发布时间: 2011-12-05
作者: ssp2009 发布时间: 2011-12-05
函数是利用不了索引的。
作者: fredrickhu 发布时间: 2011-12-05
substring(CONVERT(varchar, min(checktime), 120 ),12,5)
换成
convert(varchar(5),min(checktime),108)
把
left(CONVERT(varchar, checktime, 120 ),10)
换成
convert(varchar(10),checktime,120)
作者: qianjin036a 发布时间: 2011-12-05
select distinct convert(varchar(10),c.checktime,120) as mydate,u.userid,u.name, (select substring(CONVERT(varchar, min(checktime), 120 ),12,5) from checkinout where CONVERT(varchar(10), checktime, 120 )= CONVERT(varchar(10), c.checktime, 120 ) and userid=u.userid) from checkinout as c,userinfo as u where year(c.checktime)=@tyear and month(c.checktime)=@tmonth order by u.userid,mydate
逻辑也太混乱了吧,能把人看晕了,醒了再晕一次。
作者: cliu_beijing 发布时间: 2011-12-05
作者: geniuswjt 发布时间: 2011-12-05
SQL code
select distinct convert(varchar(10),c.checktime,120) as mydate,u.userid,u.name,
(select substring(CONVERT(varchar, min(checktime), 120 ),12,5) from checkinout where CONVERT(varchar(10), c……
把
substring(CONVERT(varchar, min(checktime), 120 ),12,5)
换成
convert(varchar(5),min(checktime),108)
把
left(CONVERT(varchar, checktime, 120 ),10)
换成
convert(varchar(10),checktime,120)
函数更改以后速度还是很慢
作者: lining0755 发布时间: 2011-12-05
“SELECT u.name, format(c.checktime,"YYYY-MM-DD") AS mydate, format(min(c.checktime),"hh:mm") AS intime, format(max(c.checktime),"hh:mm") AS outtime FROM checkinout AS c, userinfo AS u WHERE c.userid=u.userid GROUP BY format(c.checktime,"YYYY-MM-DD"), u.name;”
这样只能查询出在checkinout表有记录的数据,如果当天员工请假或者外出都没有打卡就会没有记录,我想把没有打卡的记录也显示出来,用“NULL”显示,查询语句该怎么写?我想要的效果就是能显示所有员工每天的出勤情况,没有记录的就以NULL显示
如:checkinout userinfo
userid checktime userid name
14 2011-12-02 8:30 14 张三
14 2011-12-02 17:50 13 李四
13 2011-12-02 8:25 12 王五
12 2011-12-02 8:10 11 周六
12 2011-12-02 17:57 10 游七
11 2011-12-02 18:00
查询结果如下
name mydate intime outtime
张三 2011-12-02 08:30 17:50
李四 2011-12-02 08:25 null
王五 2011-12-02 08:10 17:57
周六 2011-12-02 null 18:00
游七 2011-12-02 null null
作者: lining0755 发布时间: 2011-12-05
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28