当前位置: 首页 > 面试题库 >

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

云浩然
2023-03-14
问题内容
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 |
+------+---------------+---------------------+


 类似资料:
  • 问题内容: 我有一个名为team的表,如下所示:我只是在第三列中添加了row_number 当16出现时,则以1开头,而16依次出现,则一一加。结果就像 帮我得到结果。 问题答案: 您可以使用以下查询: 字段标识具有相同值的连续记录的切片(也称为孤岛)。外部查询用于枚举属于切片的每个记录。属于其他切片的记录被分配了值。 演示在这里

  • 问题内容: 我有一个像这样的表:例如,trans是表的名称 而且我必须更新Delta列。假设每月有一笔交易,则该值是同一帐户的当前行与同一帐户的先前行之差。这是一个可以生成增量值的虚拟sql 该查询的结果是 但是没有任何前一行的行的增量应该是其数量,例如 这些都是顺便说了。 请帮助我解决此查询。 问题答案: 这是您对原始查询进行的相应修改: 月比较从移动到,这使得一个差,并且被替换为。 脚本 的版

  • 问题内容: 我在Postgres 9.1数据库中具有以下表结构,但是理想的解决方案应该是与数据库无关的(如果可能的话): 我有一个查询(用于视图),该查询提供了下一个和上一个item.id。 例如 我可以使用以下查询执行此操作: 您可以帮助解决以下问题: 1)有没有办法让ID包裹,即 nextitemid列最后一行中的NULL itemid应该为1 previtemid列第一行中的NULL ite

  • 本文向大家介绍layui-table获得当前行的上/下一行数据的例子,包括了layui-table获得当前行的上/下一行数据的例子的使用技巧和注意事项,需要的朋友参考一下 此方法主要是获得Layui当前行数据的上一行数据,或者下一行数据,os旧的jquery选择器 se选择器 nse新的jquery选择器 以上这篇layui-table获得当前行的上/下一行数据的例子就是小编分享给大家的全部内容了

  • 我使用键和构建以下面板数据: 让我们假设2018年发生了一次冲击。我希望通过对上一行和下一行进行切片,这些行的值与shock行的值相同。 我举几个例子来说明。对于,数据集如下所示: 2018年的

  • 我有3名员工与相同的部门。我想找到他们的平均工资的基础上,前面的行。 举个例子 这就像对于第一个薪水的部门id为1,我们发现员工id为101的平均值为5000,对于相同的部门id为1,对于员工ID为102,我们找到了按部门id分组的2个值的平均值。因此平均值为 (10000 5000) /2 = 7500 但对于员工id为103的情况,部门id为1,并与上述三个金额值一起分组。因此,平均工资为(1