我有一張用戶簽入和簽出時間的表(“ lms_attendance”),如下所示:id user time io (enum)1 9 1370931202 out2 9 1370931664 out3 6 1370932128 out4 12 1370932128 out5 12 1370933037 in我正在嘗試創(chuàng)建此表的視圖,該表將僅輸出每個用戶ID的最新記錄,同時給我“ in”或“ out”值,如下所示:id user time io2 9 1370931664 out3 6 1370932128 out5 12 1370933037 in到目前為止,我已經(jīng)很接近了,但是我意識到視圖將不接受子查詢,這使它變得更加困難。我得到的最接近的查詢是:select `lms_attendance`.`id` AS `id`, `lms_attendance`.`user` AS `user`, max(`lms_attendance`.`time`) AS `time`, `lms_attendance`.`io` AS `io` from `lms_attendance` group by `lms_attendance`.`user`, `lms_attendance`.`io`但是我得到的是:id user time io3 6 1370932128 out1 9 1370931664 out5 12 1370933037 in4 12 1370932128 out這很接近,但并不完美。我知道最后一個分組依據(jù)不應(yīng)存在,但是如果沒有它,它將返回最近的時間,但不會返回其相對IO值。有任何想法嗎?謝謝!
3 回答

小唯快跑啊
TA貢獻(xiàn)1863條經(jīng)驗 獲得超2個贊
基于@TMS答案,我喜歡它,因為不需要子查詢,但是我認(rèn)為省略該'OR'部分就足夠了,而且更容易理解和閱讀。
SELECT t1.*
FROM lms_attendance AS t1
LEFT JOIN lms_attendance AS t2
ON t1.user = t2.user
AND t1.time < t2.time
WHERE t2.user IS NULL
如果您對空時間行不感興趣,可以在WHERE子句中過濾它們:
SELECT t1.*
FROM lms_attendance AS t1
LEFT JOIN lms_attendance AS t2
ON t1.user = t2.user
AND t1.time < t2.time
WHERE t2.user IS NULL and t1.time IS NOT NULL
添加回答
舉報
0/150
提交
取消