我有一个用户表,重要的列是这些。
id | logintime
---+-----------
1 | 2004-01-10
2 | 2006-02-10
3 | 2005-03-12
4 | 2006-10-23
我想创建一个近似用户注册时间的列。为此,我想在id上使用最低的登录时间,并且每个id都大于自身。 logintime是id最后一次登录站点。
虽然它并不完美,但它提供了一个最新的可能日期"对于注册时间。由于id是自动递增,我们知道id为2的人已经在id为3的人之前注册,因此我们使用id 3的登录时间来估计id 2的注册时间。
结果将是
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光标来实现它,但这对于这个简单的任务来说似乎有点过于花哨。
修改:澄清了问题。
答案 0 :(得分:1)
我认为您可以使用select
中的子查询来完成此操作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 :(得分:1)
试试这个模式Select a.MIN(timespamp) from <yourtable>as A,<yourtable>as b where a.id<=b.id;
希望这有效