加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql为当前行的下一行或上一行拉一行

发布时间:2020-12-12 16:47:10 所属栏目:MsSql教程 来源:网络整理
导读:id | photo title | created_dateXEi43 | my family | 2009 08 04dDls | friends group | 2009 08 0532kJ | beautiful place | 2009 08 06EOIk | working late | 2009 08 07 说我的身份是32kJ.如何获得下一行或前一个? 解决方法 这是我用来查找上一个/下一
id    |  photo title     |  created_date

XEi43 |  my family       |  2009 08 04
dDls  |  friends group   |  2009 08 05
32kJ  |  beautiful place |  2009 08 06
EOIk  |  working late    |  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,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`,`created`) VALUES ('dDls','friends group','2009-08-05');
INSERT INTO `photo` (`id`,`created`) VALUES ('32kJ','beautiful place','2009-08-06');
INSERT INTO `photo` (`id`,`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,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,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 |
+------+---------------+---------------------+

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读