【发布时间】:2017-09-15 15:15:30
【问题描述】:
我正在尝试使用以下查询对记录进行排名:
SELECT
ROW_NUMBER() over (partition by
TW.EMPL_ID,TW.HR_DEPT_ID,TW.Transfer_Startdate
order by TW.EMPL_ID,TW.Effective_Bdate) RN,
TW.EMPL_ID,TW.HR_DEPT_ID,TW.Transfer_Startdate,Effective_BDate from
TT_EMPLOYEE_WORKDAY TW
where TW.HR_DOMAIN_CODE = 'SGP'
但是,生成的 Row_Number 计算列仅显示第一列的分区。理想情况下,我希望 Row_Number 具有相同的值,其中按列数据分区是相同的。
任何线索我可能会出错?
使用排名或密集排名不是一个选项,因为我想识别多个员工的所有此类行,其中 EMPL_ID、HR_DEPT_ID 和 Transfer_StartDate 相同 (RN=1)
Sample data:
RN AON_EMPL_ID HR_DEPT_ID Transfer_Startdate Effective_BDate
1 0100690 69895 01/01/2017 2017-01-01
2 0100690 69895 01/01/2017 2017-01-03
3 0100690 69895 01/01/2017 2017-01-04
【问题讨论】:
-
我认为样本数据和期望的结果会帮助你解释你想要什么。
-
将数据作为 ddl+dml 进行采样,期望的结果会有所帮助...
-
因为你
Order by的结果,会打乱Partition部分,试试Order by TW.EMPL_ID,TW.HR_DEPT_ID,TW.Transfer_Startdate,TW.RN或者去掉Order by -
即使最后一行没有使用 order by,RN 编号也会有所不同。它应该是 1,因为 Partition By 中使用的前三列具有相同的数据。
-
@Sharktooth 你说的是
RANK或者DENSE_RANK,而不是ROW_NUMBER,把后一个替换成前一个,取决于你想如何显示第二名数据
标签: sql sql-server window-functions