sql - 如何从大表中选择行对?

标签 sql sqlite select

在表格中.....(ID,NAME,EVENT)

数据:

(1,BOB,E)    
(2,JANE,B)    
(3,JOE,C)    
(4,TOM,A)   
(5,JANE,B)    
(6,JOE,C)    
(7,BEN,D)    
(8,TOM,B)    
(9,JANE,D)    
(10,JOE,A)    
(11,JANE,B)    
(12,BOB,C)    
(13,JOE,C)    
.    
.    
.


所需输出:

(2,JANE,B)    
(3,JOE,C)    
(5,JANE,B)    
(6,JOE,C)


我试图列出Jane,B和Joe,C连续出现在表中的每个实例。使用sqlite。

任何帮助将不胜感激。

最佳答案

您可以使用标准SQL来执行此操作,该标准SQL也可以在SQLite上使用。想法是将给定的行连接到下一行和上一行,然后检查条件:

select t.*
from t join
     t tnext
     on tnext.id = t.id + 1 join
     t tprev
     on tprev.id = t.id - 1
where (t.name = 'Jane' and t.event = 'B' and tnext.name = 'Joe' and tnext.event = 'C') or
      (tnext.name = 'Jane' and tnext.event = 'B' and t.name = 'Joe' and t.event = 'C') or
      (t.name = 'Jane' and t.event = 'B' and tprev.name = 'Joe' and tprev.event = 'C') or
      (tprev.name = 'Jane' and tprev.event = 'B' and t.name = 'Joe' and t.event = 'C')

关于sql - 如何从大表中选择行对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576947/

相关文章:

sql - 显示 postgresql 表中的所有数据 - Heroku, JackDB

sqlite - 如何在UWP应用程序中的应用程序文件夹之外访问文件(如SQLite数据库)?

MySQL:JOIN 查询获取所有具有可为空字段的项目

mysql - mysql中如何从列中的数组中选择一行

sql - 使用 SQL 选择连续年份数据

android - 关于sqlite数据库的问题,没有这样的表:

mysql - 按列 y 分组并返回列 x 中具有最小值的列

mysql - 只在mysql中选择周五和即将到来的周一

sql - 根据计算值创建索引

php - 在 PHP 中使用 PDO 在 SQLite 和 MySQL 之间执行 JOIN?