我有一张这样的表
shortest = s1.GetShortestWord();
Console.WriteLine(shortest.Data);
我运行以下查询来获取行号:
ID Date Sale Sale_desc
1 1/1/2017 10 book
1 1/1/2017 10 book
1 1/1/2017 10 book
2 1/2/2017 12 notebook
2 1/2/2017 12 notebook
3 1/3/2017 1 pen
3 1/3/2017 1 pen
但结果并非我的预期。
select *, row_number() over (partition by id order by date)
from the_table;
前3行的row_num应该是1,2,3,但看起来row_num()没有遍历所有行。请帮忙。谢谢
答案 0 :(得分:0)
我猜你的id
列是字符串(VARCHAR/CHAR
)。你可以尝试:
select *, row_number() over (partition by CAST(id AS INTEGER) order by date)
from the_table;
<强> Rextester demo 强>
答案 1 :(得分:0)
当我运行相同的代码时,我会得到您期望的结果。我对可能与您使用的列类型不同的列类型做了一些假设。我正在使用默认排序规则进行测试,这会影响字符串比较。
如果您运行相同的测试用例并获得正确的结果,则问题出在代码中的其他位置。我们需要查看更多原始查询和架构才能找到问题。
declare @Test table
(
ID int,
[Date] Date,
Sale int,
Sale_desc varchar(50)
)
insert into @Test
(ID, [Date], Sale, Sale_desc)
select 1, '1/1/2017', 10, 'book' union all
select 1, '1/1/2017', 10, 'book' union all
select 1, '1/1/2017', 10, 'book' union all
select 2, '1/2/2017', 12, 'notebook' union all
select 2, '1/2/2017', 12, 'notebook' union all
select 3, '1/3/2017', 1 , 'pen' union all
select 3, '1/3/2017', 1 , 'pen'
select
*,
row_number() over (partition by id order by [date]) as row_num
from @test
结果:
ID Date Sale Sale_desc row_num
1 2017-01-01 10 book 1
1 2017-01-01 10 book 2
1 2017-01-01 10 book 3
2 2017-01-02 12 notebook 1
2 2017-01-02 12 notebook 2
3 2017-01-03 1 pen 1
3 2017-01-03 1 pen 2