在一行中显示Mysql中的上一个和下一个日期值

在一行中显示Mysql中的上一个和下一个日期值,mysql,sql,Mysql,Sql,我有一个这样的表,我在使用MySQL,但仍然坚持在上一条记录中显示日期 intDateId | dateLeave | dateCreated | intUpdateOrder 1 | 2018-04-01 | 2018-04-01 | NULL 2 | 2018-04-02 | 2018-04-01 | NULL 3 | 2018-04-11 | 2018-04-02 | 1 4 | 2018-04-20

我有一个这样的表,我在使用MySQL,但仍然坚持在上一条记录中显示日期

intDateId |  dateLeave  | dateCreated | intUpdateOrder
1         |  2018-04-01 | 2018-04-01  |  NULL
2         |  2018-04-02 | 2018-04-01  |  NULL
3         |  2018-04-11 | 2018-04-02  |  1
4         |  2018-04-20 | 2018-04-02  |  2
这是我到目前为止的查询,我仍然无法显示以前的日期:

    SELECT 
     intDateId, 
     GROUP_CONCAT(dateLeave) AS datePrevious, // i'm stuck here
     GROUP_CONCAT(dateLeave) AS dateCurrentUpdate, 
     intUpdateOrder
    FROM leave_date
    WHERE intUpdateOrder IS NOT NULL
    GROUP BY intUpdateOrder
我想要的是这样的:

dateCreated | datePrevious             | dateCurrentUpdate   | intUpdateOrder
2018-04-02  | (2018-04-01, 2018-4-02)  | (2018-04-11)        | 1 // datePrevious WHERE intUpdateOrder NULL
2018-04-02  | (2018-04-11)             | (2018-04-20)        | 2 // datePrevious WHERE intUpdateOrder 1

谢谢

尝试以下查询

SELECT
  q1.dateCreated,
  q2.datePrevious,
  q1.dateCurrentUpdate,
  q1.intUpdateOrder
FROM
  (
    SELECT
      t.*, 
      @rownum1 := @rownum1 + 1 AS rank
    FROM
      (
        SELECT
          IFNULL(intUpdateOrder,0) intUpdateOrder,
          MAX(dateLeave) dateCurrentUpdate,
          MAX(dateCreated) dateCreated
        FROM leave_date
        GROUP BY intUpdateOrder
      ) t,
      (SELECT @rownum1 := 0) r
    ORDER BY intUpdateOrder
  ) q1
JOIN
  (
    SELECT
      t.*, 
      @rownum2 := @rownum2 + 1 AS rank
    FROM
      (
        SELECT
          IFNULL(intUpdateOrder,0) intUpdateOrder,
          GROUP_CONCAT(dateLeave) datePrevious
        FROM leave_date
        GROUP BY intUpdateOrder
      ) t,
      (SELECT @rownum2 := 0) r
    ORDER BY intUpdateOrder
  ) q2
ON q1.rank=q2.rank+1

SQL FIDLE-

尝试以下查询

SELECT
  q1.dateCreated,
  q2.datePrevious,
  q1.dateCurrentUpdate,
  q1.intUpdateOrder
FROM
  (
    SELECT
      t.*, 
      @rownum1 := @rownum1 + 1 AS rank
    FROM
      (
        SELECT
          IFNULL(intUpdateOrder,0) intUpdateOrder,
          MAX(dateLeave) dateCurrentUpdate,
          MAX(dateCreated) dateCreated
        FROM leave_date
        GROUP BY intUpdateOrder
      ) t,
      (SELECT @rownum1 := 0) r
    ORDER BY intUpdateOrder
  ) q1
JOIN
  (
    SELECT
      t.*, 
      @rownum2 := @rownum2 + 1 AS rank
    FROM
      (
        SELECT
          IFNULL(intUpdateOrder,0) intUpdateOrder,
          GROUP_CONCAT(dateLeave) datePrevious
        FROM leave_date
        GROUP BY intUpdateOrder
      ) t,
      (SELECT @rownum2 := 0) r
    ORDER BY intUpdateOrder
  ) q2
ON q1.rank=q2.rank+1

SQL FIDLE-

您使用的MySQL版本是什么?我使用的是版本5行之间的(外键)关系是什么?这个表看起来好像是一个日志表或什么的。所以你要说的是,对于这个记录,在以前的记录中,为相同的
intUpdateOrder
值附加所有的
date leave
?@Raunak Thomas Yes你使用哪个版本的MySQL?我使用的是版本5行之间的(外键)关系是什么?此表看起来像是一个日志表或其他什么。因此,您要说的是,对于该记录,在以前的记录中,为相同的
intUpdateOrder
值附加所有
日期休假
?@Raunak Thomas yes