mysql同一个表中如何根据不同的条件将查询到的记录放到一个结果集中

现有表如下:idtimeis_login32012-07-0311:20:20132012-07-0311:25:20032012-07-0312:30:20132012... 现有表如下:
id time is_login
3 2012-07-03 11:20:20 1
3 2012-07-03 11:25:20 0
3 2012-07-03 12:30:20 1
3 2012-07-03 12:20:50 0

is_login值等于1表示登录,等于0表示登出,那么如何通过一条sql语句查询出登录时间和登出时间呢?
展开
 我来答
wwwaone
2012-08-20 · TA获得超过118个赞
知道答主
回答量:174
采纳率:100%
帮助的人:81.4万
展开全部
sql server的做法是:
select * from table where is_login=1
union
select * from table where is_login=0
mysql也有union,应该也可以正常使用。你试试 。

如果是查询最后一次登录时间和登出时间,条件中加上时间条件就OK了。希望能对你有帮助。
更多追问追答
追问
我需要的是这样显示:
id login_ time logout_time
3 2012-07-03 11:20:20 2012-07-03 11:25:20
3 2012-07-03 12:20:20 2012-07-03 12:30:50
追答
你数据表里面有字段能区分,比如你问题补充里面,四条时间。哪两条是一对吗?如果不能,实现很麻烦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
紫仑天玑
2012-08-20 · 萝卜数学关注思维过程
紫仑天玑
采纳数:324 获赞数:888

向TA提问 私信TA
展开全部
从你给的数据就看得出你做事很粗心。
------------
id time is_login
3 2012-07-03 11:20:20 1
3 2012-07-03 11:25:20 0
3 2012-07-03 12:30:20 1 登录时间晚于登出时间?
3 2012-07-03 12:20:50 0
-------------
然后你的预期又是
id login_ time logout_time
3 2012-07-03 11:20:20 2012-07-03 11:25:20
3 2012-07-03 12:20:20 2012-07-03 12:30:50
--------------
这种设计的确有问题,最好一个令牌一次登录和登出。这样简便的多。
假设你给的数据是一一对应的,可以没有登出。
那么如下排序比对的方式:

USE TEST;
SELECT
M.ID,M.Time as login_time,N.Time as logout_time
FROM
(
SELECT A.ID,A.Time,@k:=@k+1 AS rank
FROM
(
SELECT ID,Time FROM loginlog where is_login=1 ORDER BY Time ASC
) A ,(SELECT @k:=0) B
) M
LEFT JOIN
(
SELECT A.ID,A.Time,@r:=@r+1 AS rank
FROM
(
SELECT ID,Time FROM loginlog where is_login=0 ORDER BY Time ASC
) A ,(SELECT @r:=0) B
) N on(M.ID=N.ID and M.rank=N.rank)

----------
执行结果:
id login_ time logout_time

'3' '2012-07-03 11:20:20' '2012-07-03 11:25:20'
'3' '2012-07-03 12:20:20' '2012-07-03 12:30:50'
追问
老大,首先谢谢你指出我的缺点,我虚心接受,并谢谢你百忙之中回答了我的问题。
按照你的代码我进行了测试,可是为什么取出的登出时间的记录不完整呢??
追答
很简单。故事往往有个开头,而没有结尾。 

也就是正在登录的ID是有可能的。

SELECT id, 。。。。FROM 表名 GROUP BY id
像这种查询 必然不会考虑到这种情况。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
有哥说笑话
2019-08-21
知道答主
回答量:2
采纳率:0%
帮助的人:998
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4b68195
推荐于2017-11-25 · TA获得超过1520个赞
知道大有可为答主
回答量:1773
采纳率:100%
帮助的人:1717万
展开全部
select * from 表名 where id=3 and (is_login=1 or is_login=0)
更多追问追答
追问
我需要的是这样显示:
id login_ time logout_time
3 2012-07-03 11:20:20 2012-07-03 11:25:20
3 2012-07-03 12:20:20 2012-07-03 12:30:50
有没有好的办法??多谢了,在线等待好消息!
追答
SELECT id, MAX(CASE is_login WHEN '1' THEN time END) AS login_time, 
MAX(CASE is_login WHEN '0' THEN time END) AS login_out
FROM 表名 GROUP BY id

这一条SQL语句花费了我一下午时间,太难了,得分真不容易啊!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式