你好!
我有一个具有以下结构的表:
id | fecha_inicio
---+--------------------
10 | 2016-12-01 10:15:00
10 | 2016-12-03 16:02:00
11 | 2016-12-02 11:23:00
我想构建一个具有期间开始和结束的查询,例如,id 的第一个期间的结束日期10
是2016-12-03 16:02:00
. 我正在寻找的结果如下所示:
id | fecha_inicio | fecha_final
---+---------------------+--------------------
10 | 2016-12-01 10:15:00 | 2016-12-03 16:02:00
10 | 2016-12-03 16:02:00 | NULL
11 | 2016-12-02 11:23:00 | NULL
有没有办法只使用 SQL 表达式来构建这个查询?我知道可以使用其他语言构建它,但是直接在数据库中构建它会容易得多。
干杯
我一直在考虑这个想法,我想我已经找到了解决方案:使用用户变量:
id
升序和fecha
降序排序,以便能够“拖动” 的值fecha
。case
检查id
当前记录是否与id
前一个记录相同(在变量中@id_ant
):id
等于 的值@id_ant
,则输入 的值@f_ini
(在每一行上用 的值更新fecha
);id
,@id_ant
则放一个NULL
。@id_ant
,@f_ini
这样就可以在下一行使用它们了。结果看起来像这样(我使用 [SQL Fiddle][ http://sqlfiddle.com/#!9/e4522]使问题可重现;我添加了几个值以使示例更清晰):
SQL小提琴
MySQL 5.6 架构设置:
查询 1:
结果:
查询 2:
结果:
查询 3:
结果:
也可以
MIN()
在子查询中使用:Demo
Demo 2