sql为当前行的下一行或上一行提取一行

id | 照片标题| 创建日期

XEi43 | 我的家人 2009 08 04

dDls | 朋友组| 2009 08 05

32kJ | 美丽的地方 2009 08 06

EOIk | 工作到很晚 2009 08 07

说我有身份证32kJ。我将如何获得下一行或上一行?

回答:

这就是我用来查找上一个/下一个记录的方法。表格中的任何列都可以用作排序列,并且不需要联接或讨厌的技巧:

下一条记录(日期大于当前记录):

SELECT id, title, MIN(created) AS created_date

FROM photo

WHERE created >

(SELECT created FROM photo WHERE id = '32kJ')

GROUP BY created

ORDER BY created ASC

LIMIT 1;

上一个记录(日期小于当前记录):

SELECT id, title, MAX(created) AS created_date

FROM photo

WHERE created <

(SELECT created FROM photo WHERE id = '32kJ')

GROUP BY created

ORDER BY created DESC

LIMIT 1;

例:

CREATE TABLE `photo` (

`id` VARCHAR(5) NOT NULL,

`title` VARCHAR(255) NOT NULL,

`created` DATETIME NOT NULL,

INDEX `created` (`created` ASC),

PRIMARY KEY (`id`)

)

ENGINE = InnoDB;

INSERT INTO `photo` (`id`, `title`, `created`) VALUES ('XEi43', 'my family', '2009-08-04');

INSERT INTO `photo` (`id`, `title`, `created`) VALUES ('dDls', 'friends group', '2009-08-05');

INSERT INTO `photo` (`id`, `title`, `created`) VALUES ('32kJ', 'beautiful place', '2009-08-06');

INSERT INTO `photo` (`id`, `title`, `created`) VALUES ('EOIk', 'working late', '2009-08-07');

SELECT * FROM photo ORDER BY created;

+-------+-----------------+---------------------+

| id | title | created |

+-------+-----------------+---------------------+

| XEi43 | my family | 2009-08-04 00:00:00 |

| dDls | friends group | 2009-08-05 00:00:00 |

| 32kJ | beautiful place | 2009-08-06 00:00:00 |

| EOIk | working late | 2009-08-07 00:00:00 |

+-------+-----------------+---------------------+

SELECT id, title, MIN(created) AS next_date

FROM photo

WHERE created >

(SELECT created FROM photo WHERE id = '32kJ')

GROUP BY created

ORDER BY created ASC

LIMIT 1;

+------+--------------+---------------------+

| id | title | next_date |

+------+--------------+---------------------+

| EOIk | working late | 2009-08-07 00:00:00 |

+------+--------------+---------------------+

SELECT id, title, MAX(created) AS prev_date

FROM photo

WHERE created <

(SELECT created FROM photo WHERE id = '32kJ')

GROUP BY created

ORDER BY created DESC

LIMIT 1;

+------+---------------+---------------------+

| id | title | prev_date |

+------+---------------+---------------------+

| dDls | friends group | 2009-08-05 00:00:00 |

+------+---------------+---------------------+

以上是 sql为当前行的下一行或上一行提取一行 的全部内容, 来源链接: utcz.com/qa/433266.html

回到顶部