SQL中如何对重复字段值进行筛选

来源:百度知道 编辑:UC知道 时间:2024/06/08 14:50:26
我现在有一个表A,记录了某台电脑的开关机时间。因为,客户机每天开

关次数很多,所以造成每天的记录都很大,能不能用查询实现对一天中多

个时间取一个值。即开机记录取一个时间最早的值,关机记录取一个时间

最晚的值。那么每天统计的记录在报表里就只有二条。一条开机。一条关

机。求高手帮忙!
UserName UserIP Date Time Memo
www-winxp 192.168.150.82 2008-6-12 10:32:8 开机
www-winxp 192.168.150.82 2008-6-12 10:34:50 开机
www-winxp 192.168.150.82 2008-6-12 10:35:28 开机
www-winxp 192.168.150.82 2008-6-12 10:35:57 开机
www-winxp 192.168.150.82 2008-6-12 10:28:50 关机
www-winxp 192.168.150.82 2008-6-12 10:29:53 关机
www-winxp 192.168.150.82 2008-6-12 10:30:28 关机
www-winxp 192.168.150.82 2008-6-12 10:35:7 关机
谢谢Joyce830922的解答.
我把你的答案修改了一下,才在我的SQL里RUN成功.
SELECT UserName, UserIP, Date, min(Time) AS 开机, max(Time) AS 关机
FROM AccessRecord
GROUP BY UserName, UserIp, Date
再次感谢您!并谢谢所有帮忙解答的朋友!最后,署名为"匿名"的朋友,我把你的SQL存起来了,但是还没有试过.我想应该是OK的吧.但是答案只能有一个,所以我把最佳答案给了Joyce830922,希望谅解!

用SQL取开机的最早时间和关机的最晚时间!

select UserName,UserIP,Date,min(Time) 开机,max(Time) 关机 from 表名 gropu by UserName,UserIp

按时间进行排序就可以了!

union结合可以实现你想要的
select min(time)
from
表名
where
memo="开机"
union
select max(time)
from
表名
where
memo="关机"
------------
你给出的时候,只是显示一个用户名,所以,我以为就一个,如果多个的话,只能够用字查询了。当然如果你的数据不发生异常,也就是开机时间要比关机时间早的话,三楼的做法可取的,如果不符合这个逻辑的话,比如跨天的话,三楼的回答就是错误的。这种情况就要用字查询
代码如下
select A.UserName,A.UserIP,A.Date,B.openTime,C.closeTime
from
table A
inner join
(select min(time),UserName,UserIP
from table
group by
UserIP
,UserName
) B
on
A.UserName=b.UserName
and
a.UserIP=B.UserIP
后面一样,字数不够了,自己写吧

三楼正解
使用时间 最大和最小值

select UserName,UserIP,Date,min(Time),max(Time) from 表名 gropu by UserName,UserIp,Date

我的你要的应该是每次insert时候判断一下是不是有了今天开机的记录,如果没有就insert,有了就不做操作,每次关机时候也判断,如果有了就update,没有就insert