如何将列作为SQL中的新列向下移动?

时间:2017-10-15 18:01:01

标签: postgresql window-functions

我如何在SQL中执行此操作?假设我有一个看起来像这样的表Logins。这只是user_id的一个片段(实际的表格会有更多用户),它会显示用户的登录时间戳以及他们在未登录的情况下访问网站的情况。

登录:

+---------------------+---------------------+---------------------+
|       user_id       |       login_date    |      visit_date     |
|---------------------|---------------------|---------------------|
|          12         | 2017-04-02 10:29:58 | 2017-04-02 10:10:41 |
|---------------------|---------------------|---------------------|
|          12         | 2017-04-02 12:49:35 | 2017-04-02 10:10:41 |
|---------------------|---------------------|---------------------|
|          12         | 2017-05-03 12:03:39 | 2017-04-02 10:10:41 |
|---------------------|---------------------|---------------------|
|          12         | 2017-05-03 12:03:39 | 2017-04-19 07:55:40 |
|---------------------|---------------------|---------------------|
|          12         | 2017-05-03 12:03:39 | 2017-05-03 11:54:11 |
|---------------------|---------------------|---------------------|
|          12         | 2017-06-02 10:30:04 | 2017-04-02 10:10:41 |
|---------------------|---------------------|---------------------|
|          12         | 2017-06-02 10:30:04 | 2017-04-19 07:55:40 |
|---------------------|---------------------|---------------------+

如何创建此表?

+---------------------+---------------------+---------------------+---------------------+
|       user_id       |       login_date    |      visit_date     |      prev_login     |
|---------------------|---------------------|---------------------|---------------------|
|          12         | 2017-04-02 10:29:58 | 2017-04-02 10:10:41 |          NULL       |
|---------------------|---------------------|---------------------|---------------------|
|          12         | 2017-04-02 12:49:35 | 2017-04-02 10:10:41 | 2017-04-02 10:29:58 |
|---------------------|---------------------|---------------------|---------------------|
|          12         | 2017-05-03 12:03:39 | 2017-04-02 10:10:41 | 2017-04-02 12:49:35 |
|---------------------|---------------------|---------------------|---------------------|
|          12         | 2017-05-03 12:03:39 | 2017-04-19 07:55:40 | 2017-04-02 12:49:35 |
|---------------------|---------------------|---------------------|---------------------|
|          12         | 2017-05-03 12:03:39 | 2017-05-03 11:54:11 | 2017-04-02 12:49:35 |
|---------------------|---------------------|---------------------|---------------------|
|          12         | 2017-06-02 10:30:04 | 2017-04-02 10:10:41 | 2017-05-03 12:03:39 |
|---------------------|---------------------|---------------------|---------------------|
|          12         | 2017-06-02 10:30:04 | 2017-04-19 07:55:40 | 2017-05-03 12:03:39 |
|---------------------|---------------------|---------------------|---------------------+

基本上,一个显示上一个登录日期的新列,如果没有,则为null。我尝试使用滞后函数,但它只回溯到X前面的行,这对我的情况不起作用。我尝试进行自我加入,但行数在我身上爆炸。请帮忙!

编辑:nvm,终于解决了。 Dense_rank自我加入

0 个答案:

没有答案