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

前端之家收集整理的这篇文章主要介绍了sql为当前行的下一行或上一行拉一行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. id | photo title | created_date
  2.  
  3. XEi43 | my family | 2009 08 04
  4. dDls | friends group | 2009 08 05
  5. 32kJ | beautiful place | 2009 08 06
  6. EOIk | working late | 2009 08 07

说我的身份是32kJ.如何获得下一行或前一个?

解决方法

这是我用来查找上一个/下一个记录.表中的任何列都可以用作排序列,并且不需要连接或讨厌的黑客:

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

  1. SELECT id,title,MIN(created) AS created_date
  2. FROM photo
  3. WHERE created >
  4. (SELECT created FROM photo WHERE id = '32kJ')
  5. GROUP BY created
  6. ORDER BY created ASC
  7. LIMIT 1;

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

  1. SELECT id,MAX(created) AS created_date
  2. FROM photo
  3. WHERE created <
  4. (SELECT created FROM photo WHERE id = '32kJ')
  5. GROUP BY created
  6. ORDER BY created DESC
  7. LIMIT 1;

例:

  1. CREATE TABLE `photo` (
  2. `id` VARCHAR(5) NOT NULL,`title` VARCHAR(255) NOT NULL,`created` DATETIME NOT NULL,INDEX `created` (`created` ASC),PRIMARY KEY (`id`)
  3. )
  4. ENGINE = InnoDB;
  5.  
  6. INSERT INTO `photo` (`id`,`title`,`created`) VALUES ('XEi43','my family','2009-08-04');
  7. INSERT INTO `photo` (`id`,`created`) VALUES ('dDls','friends group','2009-08-05');
  8. INSERT INTO `photo` (`id`,`created`) VALUES ('32kJ','beautiful place','2009-08-06');
  9. INSERT INTO `photo` (`id`,`created`) VALUES ('EOIk','working late','2009-08-07');
  10.  
  11. SELECT * FROM photo ORDER BY created;
  12. +-------+-----------------+---------------------+
  13. | id | title | created |
  14. +-------+-----------------+---------------------+
  15. | XEi43 | my family | 2009-08-04 00:00:00 |
  16. | dDls | friends group | 2009-08-05 00:00:00 |
  17. | 32kJ | beautiful place | 2009-08-06 00:00:00 |
  18. | EOIk | working late | 2009-08-07 00:00:00 |
  19. +-------+-----------------+---------------------+
  20.  
  21.  
  22. SELECT id,MIN(created) AS next_date
  23. FROM photo
  24. WHERE created >
  25. (SELECT created FROM photo WHERE id = '32kJ')
  26. GROUP BY created
  27. ORDER BY created ASC
  28. LIMIT 1;
  29.  
  30. +------+--------------+---------------------+
  31. | id | title | next_date |
  32. +------+--------------+---------------------+
  33. | EOIk | working late | 2009-08-07 00:00:00 |
  34. +------+--------------+---------------------+
  35.  
  36. SELECT id,MAX(created) AS prev_date
  37. FROM photo
  38. WHERE created <
  39. (SELECT created FROM photo WHERE id = '32kJ')
  40. GROUP BY created
  41. ORDER BY created DESC
  42. LIMIT 1;
  43.  
  44. +------+---------------+---------------------+
  45. | id | title | prev_date |
  46. +------+---------------+---------------------+
  47. | dDls | friends group | 2009-08-05 00:00:00 |
  48. +------+---------------+---------------------+

猜你在找的MsSQL相关文章