我有以下结果集:
POST | DATE
--------------------------------------
Senior Software Engg. | 2018-04-18
Software Engg. | 2017-04-18
Assoc. Software Engg. | 2016-04-18
sql查询:
SELECT DISTINCT designation_id as id, d.title as POST, DATE(dt_datetime) as DATE
FROM users_history_check u
INNER JOIN
designations d
ON d.id = u.designation_id
WHERE u.id = $userID
ORDER BY DATE DESC
我想获取下一条记录并以月为单位执行日期差异计算,并显示记录。
预期产量:
POST | Start DATE | End DATE | MONTHS
---------------------------------------------------------------
Senior Software Engg. | 2018-04-18 | - |
Software Engg. | 2017-04-18 | 2018-04-18 | 12
Assoc. Software Engg. | 2016-04-18 | 2017-04-18 | 12
比如:
SELECT DISTINCT designation_id as id, d.title as POST, DATE(dt_datetime) as Start DATE, NEXT_RECORD(DATE(dt_datetime)) as End DATE, DATEDIFF(Start DATE, End DATE) as MONTHS....
非常感谢您的帮助。谢谢。
5条答案
按热度按时间rhfm7lfc1#
输出
演示链接
http://sqlfiddle.com/#!9/33260/15
说明:
在子查询中,我保存
Date
价值@prev
变量,并在每行中使用该变量计算END_DATE
在从列指定当前日期值之前Date
. 然后使用子查询以适当的方式呈现数据。dxpyg8gm2#
我建议像这样使用self-join
dbfiddle演示
数据表是sql的结果。可以使用
WITH
或者也可以使用子查询。cx6n0qe33#
试试这个。。。。
inkz8wg94#
xwmevbvl5#
您可以使用变量获取上一个日期:
这很棘手,因为对一个变量的所有引用都需要在同一个表达式中。这就是为什么它使用
CASE
以一种相当神秘的方式。在mysql 8.0和基本上所有其他数据库中,您可以使用
LEAD()
相反。