如何求得时间差的查询语句

szzhou 2007-11-09 09:39:02
一个表,有二个列:logintime,loginname.现需要将loginname取得登入系统时间和退出系统时间之间的时间差,就是使用时间.(有连续两个登入或退出的时间按最后一个计算)不知道这样的查询语句如何写,请各位大侠指教.表如下

logintime loginname
2007-11-08 19:32:00 包装检验 退出系统 客户端IP 192.168.7.218
2007-11-08 19:31:00 包装检验 登入到系统 客户端IP 192.168.7.218
2007-11-08 19:04:00 包装检验 退出系统 客户端IP 192.168.7.34
2007-11-08 18:58:00 包装检验 登入到系统 客户端IP 192.168.7.34
2007-11-08 18:51:00 包装检验 登入到系统 客户端IP 192.168.7.221
2007-11-08 17:52:00 包装检验 退出系统 客户端IP 192.168.7.218
2007-11-08 16:56:00 包装检验 登入到系统 客户端IP 192.168.7.218
2007-11-08 16:17:00 包装检验 退出系统 客户端IP 192.168.7.221
2007-11-08 16:17:00 包装检验 登入到系统 客户端IP 192.168.7.221
2007-11-08 16:16:00 包装检验 退出系统 客户端IP 192.168.7.220
2007-11-08 16:14:00 包装检验 登入到系统 客户端IP 192.168.7.220
2007-11-08 16:05:00 包装检验 登入到系统 客户端IP 192.168.7.218
2007-11-08 15:13:00 包装检验 登入到系统 客户端IP 192.168.7.218
2007-11-08 13:51:00 包装检验 退出系统 客户端IP 192.168.7.218
2007-11-08 13:39:00 包装检验 登入到系统 客户端IP 192.168.7.218
2007-11-08 10:55:00 包装检验 退出系统 客户端IP 192.168.7.218
2007-11-08 10:14:00 包装检验 登入到系统 客户端IP 192.168.7.218
2007-11-08 10:14:00 包装检验 退出系统 客户端IP 192.168.7.34
2007-11-08 10:14:00 包装检验 登入到系统 客户端IP 192.168.7.34
2007-11-08 10:13:00 包装检验 退出系统 客户端IP 192.168.7.34
2007-11-08 10:13:00 包装检验 登入到系统 客户端IP 192.168.7.34
2007-11-08 10:13:00 包装检验 退出系统 客户端IP 192.168.7.34
2007-11-08 10:13:00 包装检验 登入到系统 客户端IP 192.168.7.34
2007-11-08 10:05:00 包装检验 退出系统 客户端IP 192.168.7.221


...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
szzhou 2007-11-12
  • 打赏
  • 举报
回复
多谢各位大侠指教
internetroot 2007-11-09
  • 打赏
  • 举报
回复
还是改表结构好,还可以省略很多冗余数据,比如
2007-11-08 19:32:00 包装检验 退出系统 客户端IP 192.168.7.218
2007-11-08 19:31:00 包装检验 登入到系统 客户端IP 192.168.7.218
按2楼的表结构就便成了:
logINtime logOUTtime loginname
2007-11-08 19:31:00 2007-11-08 19:32:00 包装检验 客户端IP 192.168.7.218
节省了以下字段
包装检验 登入到系统 客户端IP 192.168.7.218
多好
shineran 2007-11-09
  • 打赏
  • 举报
回复
数据表在设计上就有问题,一般会新加一个字段“logouttime”,在登陆时新增一条记录,在退出时直接在“logouttime”上作更新。
数据表结构变成以下格式:

logintime logouttime loginname

2007-11-08 19:31:00 2007-11-08 19:32:00 包装检验 客户端IP 192.168.7.218
2007-11-08 18:58:00 2007-11-08 19:04:00 包装检验 客户端IP 192.168.7.34
2007-11-08 17:52:00 2007-11-08 18:51:00 包装检验 客户端IP 192.168.7.221

这样就轻易解决问题了。
直接使用SQL

SELECT logouttime-logintime FROM [TABLE]
Rya 2007-11-09
  • 打赏
  • 举报
回复

--测试过
select datediff(ss,b.LoginTime,TableLogOut.LoginTime) as seconds,TableLogOut.LoginIP
from PackDetect as b,
(select LoginTime,ltrim(rtrim(substring(LoginName,22,24))) as LoginIP from PackDetect as a where substring(LoginName,8,4) like '退出%'
and LoginTime >= all(select LoginTime from PackDetect where LoginName like rtrim(a.LoginName)+'%')
) as TableLogOut ---求所有最后登出时间及IP
where substring(b.LoginName,8,12) like '%登入到系统%'
and substring(b.LoginName,22,24) like '%'+LoginIP+'%'
and b.LoginTime>=all ---找出相同IP的最后登入时间
(select LoginTime from PackDetect as c
where substring(c.LoginName,8,12) like '%登入到系统%'
and substring(c.LoginName,22,24) like '%'+LoginIP+'%'
)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧