有个表Log,有字段id,type,time。type=0表示用户进入,type=1表示用户离开
Log
id type time
0 0 1
0 1 2
1 0 4
1 1 5
0 0 6
0 1 8
2 0 9
现在希望显示如下信息
Out
id in_time out_time
0 1 2
0 6 8
1 4 5
2 9 null
按用户显示其进入时间和离开时间
如何写SQL?
------解决方案--------------------
select id,case when type=0 then time end as in_time,case when type=1 then time end as out_tim
from Log
------解决方案--------------------
select id,time as in_time,out_time=(select top 1 time from log b where b.type=1 and a.id=b.id and b.time> a.time order by time) from log a
where type=0
------解决方案--------------------
用循环写?
------解决方案--------------------
select
a.id,a.time as in_time,min(b.time) as out_time
from
log a
left join
log b
where
a.id=b.id and a.time <b.time
group by
a.id,a.time
------解决方案--------------------
我那个不对,想错了! :(
------解决方案--------------------
收藏 ---
------解决方案--------------------
提点意见,首先要保证进入和离开这两条数据一定要有健全机制保证成对出现,那么查询才有意义。
------解决方案--------------------
将语句里有log的地方换成你的查询语句,两头加上括号即可
------解决方案--------------------
都换,或者你用个视图来代替也行
------解决方案--------------------
maple0112() ( ) 信誉:100 Blog 加为好友 2007-04-13 11:42:23 得分: 0
提点意见,首先要保证进入和离开这两条数据一定要有健全机制保证成对出现,那么查询才有意义。
同意以上观点,你这个表设计的就有问题
------解决方案--------------------
SELECT intime.Id,intime.time in_time,min(outtime.time) out_time
FROM (
SELECT id,time
FROM Log intime
WHERE type=0
)intime LEFT JOIN (
SELECT id,time
FROM Log outtime
WHERE type=1
)outtime
ON intime.id=outtime.Id
AND intime.time <outtime.time
GROUP BY intime.Id,intime.time
ORDER BY intime.Id
表结构设计有问题,不然也不至于如此麻烦。
------解决方案--------------------
mark
------解决方案--------------------
学习
------解决方案--------------------
mark
------解决方案--------------------
应该再加一个字段group2,标识那两条是属于同组的纪录(需要在写程序的时候合理判断),即为1,2,3.....然后sql就很容易查了