2017-04-16 32 views
-1

我有一個用戶表,重要的列是這些。獲取大於或等於自身的ID的最小時間戳

id | logintime 
---+----------- 
1 | 2004-01-10 
2 | 2006-02-10 
3 | 2005-03-12 
4 | 2006-10-23 

我想創建一個近似於用戶註冊時間的列。要做到這一點,我想採取最低的登錄時間在id和每個id大於本身。登錄時間是ID最後一次登錄該站點的時間。

雖然它並不完美,但會爲註冊表提供「最新的可能日期」。由於ID是自動增量,我們知道,ID爲2人已id爲3人之前註冊的,所以我們用logintime近似爲ID 2 registertime的ID 3.

其結果將是

id | logintime | Registertime 
---+------------+------------- 
1 | 2004-01-10 | 2004-01-10 
2 | 2006-02-10 | 2005-03-12 
3 | 2005-03-12 | 2005-03-12 
4 | 2006-10-23 | 2006-10-23 

我可以用一個查詢來做到這一點嗎?我認爲我可以用t-cursor來實現它,但是對於這個簡單的任務來說,這看起來有點太過分。 :

編輯:澄清了這個問題。

+0

我不明白的結果集滿足標準 – Strawberry

+0

@Strawberry如何澄清這個問題,希望你最好現在明白了。 – Linkan

回答

1

我認爲你可以用一個子查詢做到這一點在選擇

SELECT a.id, a.logintime, 
     (SELECT MIN(logintime) 
     FROM table b 
     WHERE b.id >= a.id) Registertime 
FROM table a 

隨着加入它看起來像:

SELECT a.id, a.logintime, MIN(b.logintime) Registertime 
FROM table a INNER JOIN table b on b.id >= a.id 
GROUP BY a.id, a.logintime 

我不知道哪一個是更好的性能條款。

+1

完美地工作。這將是一次性查詢,所以性能不是一個大問題。 – Linkan

1

試試這個行話Select a.MIN(timespamp) from <yourtable>as A,<yourtable>as b where a.id<=b.id;

希望這個作品

+0

這使用舊式連接,這是非常不鼓勵。那裏有更多的語法錯誤,甚至糾正了一切,代碼沒有返回我需要的東西。 – Linkan

相關問題