Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL在组中遍历以下值的列_Sql_Oracle - Fatal编程技术网

Oracle SQL在组中遍历以下值的列

Oracle SQL在组中遍历以下值的列,sql,oracle,Sql,Oracle,我已经编写了一个程序来获得如下所示的数据顺序,这意味着ID为1的用户从a->b->c->d->e->g->b->f进行遍历。我想在用户访问d页之后,在访问b页的位置选择该ID,这种情况下ID为1就足够了。由于我的页面很长,我一直在寻找一个解决方案,其中字符串太长的错误不会出现 在一个类似以下的数据环境中: ID Value 1 a 1 b 1 c 1 d 1 e 1 g 1 b 1 f 2 b 2 c 2

我已经编写了一个程序来获得如下所示的数据顺序,这意味着ID为1的用户从a->b->c->d->e->g->b->f进行遍历。我想在用户访问d页之后,在访问b页的位置选择该ID,这种情况下ID为1就足够了。由于我的页面很长,我一直在寻找一个解决方案,其中字符串太长的错误不会出现 在一个类似以下的数据环境中:

ID    Value
1     a
1     b
1     c
1     d
1     e
1     g
1     b
1     f
2     b
2     c
2     d
2     g
输出:

身份证 一,


任何人都可以帮助我进行sql查询。

让我假设您的数据有一个createdat日期,用于订购目的,增量id也可以工作。以下查询表示您想要的内容:

select distinct id
from t
where value = 'b' and
      exists (select 1
              from t t2
              where t2.id = t.id and t2.value = 'd' and t2.createdat < t.createdat
             )

表表示无序的行集合。那么,下文是如何定义的呢?只是一个ID大于另一个ID吗?其中一个值大于另一个值?@Thomas:-这是一个有序集,但不是数字集,因为在我的实际代码中,它将是字母数字集,而不是数字集。在这个例子中,我想返回的是ID,其中2跟在5 ID 1后面。可以看出,在ID-2中,值2在5之前,因此结果不包含ID 2。@user2342436-表是无序的行集。根据定义。只有当您使用ORDERBY子句对它们进行查询时,才会对它们进行排序。因此,不能保证针对相同数据的两个相同的Select语句(都没有Order By)将以相同的顺序返回数据。只有Order By才能保证。@user2342436-因此,假定它被定义为UserId A=UserId B+1?@user2342436-被定义为按Id-then值排序的行序列,这不是我们在这里看到的。谢谢你的回答。我想知道我们是否可以在不需要ID或日期列的情况下用另一种方式来实现这一点。这是因为我的表太大,添加ID列需要时间again@user2342436 . . . 在一个单词中,表是无序的。如果表中只有insert,并且Oracle实例只有一个线程,并且磁盘系统中没有并行性,那么可以尝试rownum。但这并不能保证奏效。而且它在大多数情况下都不起作用。在每个表中使用自动递增的主键都是一个好主意,这是一个它有用的示例。感谢您的回复