在一行中显示Mysql中的上一个和下一个日期值
我有一个这样的表,我在使用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
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