mah*_*efi 20 sql sql-server rows sql-server-2012
例如,我有这样的声明:
my name is Joseph and my father's name is Brian
Run Code Online (Sandbox Code Playgroud)
此语句按字分割,如下表所示:
------------------------------
| ID | word |
------------------------------
| 1 | my |
| 2 | name |
| 3 | is |
| 4 | Joseph |
| 5 | and |
| 6 | my |
| 7 | father's |
| 8 | name |
| 9 | is |
| 10 | Brian |
------------------------------
Run Code Online (Sandbox Code Playgroud)
我想得到每个单词的上一个和下一个单词
例如,我想获得"name"的上一个和下一个单词:
--------------------------
| my | name | is |
--------------------------
| father's | name | is |
--------------------------
Run Code Online (Sandbox Code Playgroud)
我怎么能得到这个结果?
a_h*_*ame 42
您没有指定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';
Run Code Online (Sandbox Code Playgroud)
SQLFiddle:http://sqlfiddle.com/#!12/7639e/1
为什么没有身体给出简单的答案?
SELECT LAG(word) OVER ( ORDER BY ID ) AS PreviousWord ,
word ,
LEAD(word) OVER ( ORDER BY ID ) AS NextWord
FROM words;
Run Code Online (Sandbox Code Playgroud)
没有子查询:
SELECT a.word
FROM my_table AS a
JOIN my_table AS b
ON b.word = 'name' AND abs(a.id - b.id) <= 1
ORDER BY a.id
Run Code Online (Sandbox Code Playgroud)