mysql 查詢鄰近的兩條記錄並合併成一條

2021-07-23 13:40:29 字數 1418 閱讀 8967

現有乙個簽到表,需要查出每個人的每次簽到和簽出時間

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...