2016-05-12 23 views
0

當用戶登錄到我的應用程序時,該行被插入到登錄日誌表中。我想要在用戶登錄系統時打印上次登錄時間。我怎樣才能獲得最後登錄時間?如何獲取使用時間插入的第二行?

我試過max(time),但它給了我當前的登錄時間,但我想要以前。我怎樣才能得到這個?

這裏是我的查詢:

select login_time 
from tblname 
where emp_code = 123 
    and login_time = (select max(LOGIN_TIME) 
        from tblname 
        where emp_code = 123) 
+0

請標記正確的DBMS。它是MySQL,Oracle還是SQL Server? –

+0

好的,編輯:) :) –

+0

類似於:select max(login_time)from ... where login_time jarlh

回答

3

你可以使用ROW_NUMBER

WITH Cte AS(
    SELECT *, 
     ROW_NUMBER() OVER(ORDER BY LOGIN_TIME DESC) AS rn 
    FROM tblname 
    WHERE emp_code = 123 
) 
SELECT LOGIN_TIME FROM CTE WHERE rn = 2 

,不使用CTE:

SELECT LOGIN_TIME 
FROM (
    SELECT *, 
     ROW_NUMBER() OVER(ORDER BY LOGIN_TIME DESC) AS rn 
    FROM tblname 
    WHERE emp_code = 123 
) t 
WHERE rn = 2 

您還可以利用Oracle的ROWNUM的:

SELECT * 
FROM (
    SELECT login_time 
    FROM tblname 
    WHERE emp_code = 123 
    ORDER BY login_time DESC 
) t 
WHERE ROWNUM = 2 
+0

建議我沒有使用「與cte」的答案,只是一個簡單的查詢 –

+0

只需將cte中的查詢移動到子查詢 –

+0

好吧謝謝它工作:) –

1

嘗試使用WHERE子查詢,像這樣:

SELECT MAX(login_time) FROM tblname WHERE emp_code=123 AND login_time NOT IN (SELECT MAX(login_time) FROM tblname WHERE emp_code=123 )