我有这样的表
id | name | registration date
-----------------------------
1 | ABC | 2018-01-01
2 | DEF | 2018-01-02
3 | GHI | 2018-01-06
4 | JKL | 2018-01-07
5 | MNO | 2018-01-09
我想创建一个包含人名,注册日期以及在他之后注册的人姓名的表格。
所以我希望结果表看起来像这样:
name | registration date | next person
---------------------------------------
ABC | 2018-01-01 | DEF
DEF | 2018-01-02 | GHI
GHI | 2018-01-06 | JKL
JKL | 2018-01-07 | MNO
MNO | 2018-01-09 | -
在SQL中实现此目的的最有效方法是什么?
提前谢谢
答案 0 :(得分:2)
您没有说明您的DBMS,但以下是使用所有modern DBMS支持的窗口函数的ANSI标准SQL
select id,
name,
registration_date,
lead(name) over (order by registration_date) as next_person
from the_table
order by registration_date;
答案 1 :(得分:0)
您需要subquery
:
select *, (select name
from table
where id > t.id
order by id
limit 1
) as next_person
from table t;
但是,您没有标记任何DBMS
,因此我选择subquery
和limit
子句,但DBMS
中的一些没有限制条款,例如SQL Server
所以请改用TOP
子句:
在SQL Server中,您可以使用LEAD()
函数:
select *, lead(name) over (order by id) as next_person
from table t;
答案 2 :(得分:-1)
尝试此查询,它正在运行。
select
t1.name,
t1.registration_date as "registration date",
if(t2.name is null, '-', t2.name ) as "next person"
from test as t1
left join test as t2 on t2.registration_date > t1.registration_date
group by t1.id