PARTITION BY重复的ID,并加入ID值最小的JOIN

时间:2019-02-15 12:59:42

标签: sql sql-server-2008 join view row-number

我需要通过SQLServer 2008表hstThstD中的视图进行JOIN。主表包含有关雇员及其“登录”的数据(因此,多个记录在x个月内与x雇员相关联),第二个表具有基于月数的有关其区域的信息,我需要加入这两个表,但要保留最早的记录作为联接和与该ID关联的其余记录的参考。 因此hstT类似于:

id id2 period   name
----------------------
x  1   0718     john
x  1   0818     john
y  2   0718     jane

还有hstD

id2 period   area
----------------------
1   0718     sales
1   0818     hr
2   0707     mng

使用OUTER JOIN,我设法合并基于ID2(用户ID)和period BUT的所有数据,就像我提到的那样,我需要根据最早的记录加入另一个表通过关联ID(以我可以用作标准),它看起来像这样:

id id2 period   name area
---------------------------
x  1   0718     john sales
x  1   0818     john sales
y  2   0718     jane mng

我知道我可以使用ROW_number,但是我不知道如何在视图中使用它并在这些条件下将其加入:

SELECT     T.*,D.*, ROW_NUMBER() OVER (PARTITION BY T.ID ORDER BY T.PERIOD ASC) AS ORID
FROM         dbo.hstT AS T LEFT OUTER JOIN
                      dbo.hstD AS D ON T.period = D.period AND T.id2 = D.id2
WHERE    ORID = 1
--promps error as orid doesn't exist in any table

1 个答案:

答案 0 :(得分:1)

您可以使用declare module 'package-without-ts' { class ClassA { public options: object constructor (options: IOptions) // {} in your code is invalid } export = ClassA // special syntax for commonjs style export }

apply

实际上,如果您只想要最早的期限,则可以过滤并select t.*, d.area from hstT t outer apply (select top (1) d.* from hstD d where d.id2 = t.id2 and d.period <= t.period order by d.period asc ) d;

join