現有乙個簽到表,需要查出每個人的每次簽到和簽出時間
t_sign表結構和資料如下 id
user
type
time1a
in2016-10-10 09:00:002b
in2016-10-10 09:05:003b
out2016-10-10 10:00:005a
out2016-10-10 11:27:006a
in2016-10-10 13:57:008b
in2016-10-10 16:08:009a
out2016-10-10 17:45:0010a
in2016-10-10 18:01:0011b
out2016-10-10 18:02:00
希望查詢結果
user
in_time
out_time
a2016-10-10 09:00:00
2016-10-10 11:27:00
a2016-10-10 13:57:00
2016-10-10 17:45:00
a2016-10-10 18:01:00
null
b2016-10-10 09:05:00
2016-10-10 10:00:00
b2016-10-10 16:08:00
2016-10-10 18:02:00
sql:
select user, time as in_time,
(select time from t_sign where user=s.user and type='out' and time > s.time order by time limit 1) out_time
from t_sign s where type = 'in' order by user, time
select user, min(time) in_time, if(min(type)!=max(type),max(time),null) out_time from(
select @group_row:=case when @user=s.user then @group_row+1 else 1 end as group_row, --簽到順序
ceil(@group_row / 2) sign_time, --第幾輪簽到
@user:=s.user as user,
s.time,
s.type
from t_sign s, ( select @group_row:=1, @user:='') as r
order by s.user, s.time
) t group by user, sign_time --按輪數分組,取出每輪分組的最大和最小時間
MySQL 兩條記錄合併查詢成一條顯示
資料庫資料如下 張三,屬於a部門也屬於b部門,在表裡存的是兩條記錄,但是在頁面上我想要根據人來顯示,在一條記錄裡顯示張三屬於a部門和b部門,張三隻顯一條記錄,不顯示兩條。select t.id,t.code,t.name,max case t.type when a then t.dept name...
Mysql 計算相鄰兩條記錄的時間差
比如排序之後我們想計算兩條相鄰記錄的時間差,因為mysql沒有視窗函式所以要麼模擬視窗函式要麼使用表自關聯,現有如下表資料 單獨只有這些資訊使用自關聯沒有約束條件,這時候我們可以使用增加乙個序號的字段,然後使用序號條件關聯 表一 select a.i i 1 as ord num from t pu...
Oracle取兩條記錄的交集INTERSECT
摘自 intersect 操作符用來合併兩個查詢,返回兩個查詢中都存在的記錄,即返回兩個查詢結果的交集,前提是兩個查詢的列的數量和資料型別必須完全相同。select code from employee where gender m intersect select code from salary...