【发布时间】:2012-08-02 21:23:08
【问题描述】:
我的表有如下值(RowCount 由下面的查询生成):
ID Date_trans Time_trans Price RowCount
------- ----------- ---------- ----- --------
1699093 22-Feb-2011 09:30:00 58.07 1
1699094 22-Feb-2011 09:30:00 58.08 1
1699095 22-Feb-2011 09:30:00 58.08 2
1699096 22-Feb-2011 09:30:00 58.08 3
1699097 22-Feb-2011 09:30:00 58.13 1
1699098 22-Feb-2011 09:30:00 58.13 2
1699099 22-Feb-2011 09:30:00 58.12 1
1699100 22-Feb-2011 09:30:08 58.13 3
1699101 22-Feb-2011 09:30:09 57.96 1
1699102 22-Feb-2011 09:30:09 57.95 1
1699103 22-Feb-2011 09:30:09 57.93 1
1699104 22-Feb-2011 09:30:09 57.96 2
1699105 22-Feb-2011 09:30:09 57.93 2
1699106 22-Feb-2011 09:30:09 57.93 3
1699107 22-Feb-2011 09:30:37 58 1
1699108 22-Feb-2011 09:30:37 58.08 4
1699109 22-Feb-2011 09:30:38 58.08 5
1699110 22-Feb-2011 09:30:41 58.02 1
1699111 22-Feb-2011 09:30:41 58.02 2
1699112 22-Feb-2011 09:30:41 58.01 1
1699113 22-Feb-2011 09:30:41 58.01 2
1699114 22-Feb-2011 09:30:41 58.01 3
1699115 22-Feb-2011 09:30:42 58.02 3
1699116 22-Feb-2011 09:30:42 58.02 4
1699117 22-Feb-2011 09:30:45 58.04 1
1699118 22-Feb-2011 09:30:54 58 2
1699119 22-Feb-2011 09:30:57 58.05 1
ID 列是 IDENTITY 列。
我正在使用此查询来获取 连续行数:
SELECT ID, Date_trans, Time_trans, Price
,ROW_NUMBER() OVER(PARTITION BY Price ORDER BY ID) RowCount
FROM MyTable
ORDER BY ID;
我得到的RowCount 对于大多数值是正确的,但对于某些值是错误的。例如:
- ID 1699100 价格 58.13 – 计数应为 1(显示 3)。
- ID 1699104 价格 57.96 – 计数应为 1(显示 2)。
- ID 1699105、1699106 价格 57.93 – 计数应为 1、2(显示 2、3)。
我在 PostgreSQL 中尝试了相同的查询并找到了相同的结果。
我已经上传了a csv data sample here。
我对分区的这种意外结果感到困惑。有人可以帮帮我吗?
【问题讨论】:
-
我认为您不太了解分析查询。 ID 1699100 的价格是 58.13,它是这个价格的第三高 ID,所以答案是正确的。你想做什么?计算特定价格的行数?
-
我认为
ID 1699100 Price 58.0 – count should be 1 (showing 3);中的58.0实际上应该是58.13(或者第1699097、1699098、1699100 行中的价格应该是58.0而不是58.13)。 -
我冒昧地根据@AndriyM 的调查结果修复了问题中的示例。如果我错了,请更正。
标签: sql sql-server aggregate-functions window-functions