它看起来像你经历了很多得到一点......我会开始一个单一的查询,每天获得最小和最大的人,然后从那里。我希望在用户登录时戳指数...
select
LogInOut.LogActivity,
LogInOut.JustDay,
LogInOut.What_Time,
ULMain.UserLog_User_ID,
U1.user_name
from
(select
day(UL.UserLog_Timestamp) as JustDay,
max(UL.UserLog_Log_type) as LogActivity,
min(UL.userlog_timestamp) as What_Time
from
UserLog UL
where
UL.UserLog_Log_Type = 1
group by
day(UL.UserLog_Timestamp)
UNION
select
day(UL.UserLog_Timestamp) as JustDay,
max(UL.UserLog_Log_type) as LogActivity,
max(UL.userlog_timestamp) as What_Time
from
UserLog UL
where
UL.UserLog_Log_Type = 2
group by
day(UL.UserLog_Timestamp)) LogInOut
JOIN UserLog ULMain
on LogInOut.What_Time = ULMain.UserLog_Timestamp
AND LogInOut.LogActivity = ULMain.UsrLog_Log_Type
JOIN Users U1
on ULMain.UserLog_User_ID = U1.User_ID
order by
LogInOut.JustDay,
LogInOut.LogActivity
会创造这样
LogActivity JustDay What_Time UserLog_User_ID user_name
1 Mar 1 7:56am 123 Bill Board
2 Mar 1 6:23pm 431 Eilean Dover
1 Mar 2 7:02am 98 Crystal Clear
2 Mar 2 6:47pm 221 Ben Dover
现在,如果你想要这个卷起的单行(交叉表)所以一排显示的那一天,谁在第一,谁出最后,我想包改变顶部和类似
select
LogInOut.JustDay,
MIN(LogInOut.What_Time) as EarlyLogin,
MAX(IF(LogInOut.LogActivity = 1, U1.User_Name, ' ')) as EarlyUser,
MAX(LogInOut.What_Time) as LastLogOut
MAX(IF(LogInOut.LogActivity = 2, U1.User_Name, ' ')) as LastUser
from
(exact rest of from/join/order by clause)
group by
LogInOut.JustDay
JustDay EarlyLogin EarlyUser LastLogOut LastUser
Mar 1 7:56am Bill Board 6:23pm Eilean Dover
Mar 2 7:02am Crystal Clear 6:47pm Ben Dover
添加组正如我在编辑的问题说,我只能用这2桌。 +1虽然。 – Fofole 2012-03-06 13:17:38
@Fofole,我只使用你提供的两个表......“别名”引用是内部SQL临时结果集,没有使用“其他”表。 – DRapp 2012-03-06 13:41:07