我有一张桌子:
Trip Stop Time
-----------------
1 A 1:10
1 B 1:16
1 B 1:20
1 B 1:25
1 C 1:31
1 B 1:40
2 A 2:10
2 B 2:17
2 C 2:20
2 B 2:25
我想在我的查询输出中增加一列:
Trip Stop Time Sequence
-------------------------
1 A 1:10 1
1 B 1:16 2
1 B 1:20 2
1 B 1:25 2
1 C 1:31 3
1 B 1:40 4
2 A 2:10 1
2 B 2:17 2
2 C 2:20 3
2 B 2:25 4
困难的部分是B,如果B彼此相邻,我希望它具有相同的顺序,如果不是,则视为新行。
我知道
row_number over (partition by trip order by time)
row_number over (partition by trip, stop order by time)
他们都不符合我想要的条件。有没有办法查询这个?
create table test
(trip number
,stp varchar2(1)
,tm varchar2(10)
,seq number);
insert into test values (1, 'A', '1:10', 1);
insert into test values (1, 'B', '1:16', 2);
insert into test values (1, 'B', '1:20', 2);
insert into test values (1 , 'B', '1:25', 2);
insert into test values (1 , 'C', '1:31', 3);
insert into test values (1, 'B', '1:40', 4);
insert into test values (2, 'A', '2:10', 1);
insert into test values (2, 'B', '2:17', 2);
insert into test values (2, 'C', '2:20', 3);
insert into test values (2, 'B', '2:25', 4);
select t1.*
,sum(decode(t1.stp,t1.prev_stp,0,1)) over (partition by trip order by tm) new_seq
from
(select t.*
,lag(stp) over (order by t.tm) prev_stp
from test t
order by tm) t1
;
TRIP S TM SEQ P NEW_SEQ
------ - ---------- ---------- - ----------
1 A 1:10 1 1
1 B 1:16 2 A 2
1 B 1:20 2 B 2
1 B 1:25 2 B 2
1 C 1:31 3 B 3
1 B 1:40 4 C 4
2 A 2:10 1 B 1
2 B 2:17 2 A 2
2 C 2:20 3 B 3
2 B 2:25 4 C 4
10 rows selected
您想查看停靠点是否在一行和下一行之间改变。如果是这样,您要增加序列。因此,请使用lag将上一个停靠点移至当前行。
我之所以使用DECODE是因为它处理NULL的方式,并且比CASE更为简洁,但是如果您正在阅读教科书,则可能应该使用CASE。
将SUM用作带有ORDER BY子句的解析函数将提供您要寻找的答案。
问题内容: 我的SQL代码有什么问题? 我试图消除此答案之后的重复行 但是我一直收到以下错误: 在“(”附近:语法错误:SELECT rn = ROW_NUMBER()OVER( 这是SQL代码: 我在某处读到它与SQL版本或sqlite3的用法有关? 这里是一些其他有关该问题的信息: 我有一张开始的桌子: 我想最后得到一个没有关于col_2和col_3的复数的表(不关心col_1和col_4是什
问题内容: MySQL中有没有复制SQL Server函数的好方法? 例如: 然后,例如,我可以添加一个条件以将限制限制为1,以获得每对最高的一行。 问题答案: 我想要每对(col1,col2)对具有最高col3的行。 这是一个按组的最大值,是最常提出的SQL问题之一(因为它看起来应该很容易,但实际上并非如此)。 我经常为null-self-join充实: “获取表中没有匹配col1,col2的其
本文向大家介绍SQL Server中row_number分页查询的用法详解,包括了SQL Server中row_number分页查询的用法详解的使用技巧和注意事项,需要的朋友参考一下 ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号。在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于
问题内容: 首先,我想提一下,我已经检查了所有其他问题,没有一个与我的相似,所以我认为这不是重复的。 我有两个表表,到目前为止,“ Article_tbl”具有超过300,000行,而“ ArticleZone_tbl”具有几乎相同的行数。 “ Article_tbl”包含一个身份主键“ ArticleID”。“ ArticleZone_tbl”包含一个主键,该主键由三列组成:“ ArticleI
问题内容: 我正在使用Microsoft SQL Server Management Studio 2008。 我有看起来像这样的数据: 我希望结果显示如下: 这些列是未知的,所以我知道我需要一个动态查询。我已经尝试过使用数据透视功能进行动态查询,但只在相同类型的值下进行分组。所以聚合函数对我不利。 这是我尝试过的查询: 执行(@DynamicPivotQuery) 接下来,我添加了row_num
问题内容: 我有一个页面,它执行一个自定义查询,该查询已保存在数据库中的某个位置。我需要能够在gridview上启用分页。 例如,查询保存在数据库中的方式如下: 这将返回10,000行。 使用下面的方法,我使它返回10行。 这是绑定网格的代码 问题在于查询本身返回10行,因此gridview将永远不会显示寻呼机。 问题答案: 此代码在aspx页面 在此,将在.cs页中使用的方法。该方法用于跟踪pa