sql - 从使用(WHERE)条件选择的行中获取上一行和下一行

标签 sql sql-server sql-server-2012 rows

例如,我有以下语句:

my name is Joseph and my father's name is Brian

该语句按单词拆分,如下表:
------------------------------
|      ID      |   word      |
------------------------------
|       1      |   my        |
|       2      |   name      |
|       3      |   is        |
|       4      |   Joseph    |
|       5      |   and       |
|       6      |   my        |
|       7      |   father's  |
|       8      |   name      |
|       9      |   is        |
|       10     |   Brian     |
------------------------------

我想获得每个单词的上一个和下一个单词

例如,我想获取“名称”的上一个词和下一个词:
--------------------------
|    my    |  name  |  is |
--------------------------
| father's |  name  |  is |
--------------------------

我怎么能得到这个结果?

最佳答案

您没有指定DBMS,因此以下是ANSI SQL:

select prev_word, word, next_word
from (
    select id, 
           lag(word) over (order by id) as prev_word,
           word,
           lead(word) over (order by id) as next_word
    from words
) as t
where word = 'name';

SQLFiddle:http://sqlfiddle.com/#!12/7639e/1

关于sql - 从使用(WHERE)条件选择的行中获取上一行和下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27086377/

相关文章:

mysql - 如何更改复合主键以添加附加列

Mysql 数据库 - 平均值

c# - EF Core 2.1 中的全文搜索?

sql - 在 SQL Server 中删除/重新创建类型

java - 面向对象语言(如 Java)中的嵌入式 SQL

mysql - 使用 MySQL,我如何知道谁每年至少参加一次事件?

sql-server - 如何使用递归 CTE 获取从 00 到 23 的时间?

ASP.NET MVC 4 异步数据库调用 : never returns the HTTP response

tsql - 从一列中提取分层数据

c# - ExecuteSqlCommand 与 SqlQuery 有什么区别?什么时候做数据库访问?