如何使用最大日期返回动态表

时间:2019-05-09 14:58:53

标签: sql sql-server

我保留一个日志,在其中输入作业,描述,TC代码,单位,请求的日期和请求者。从这里,我需要返回每个作业,以及每个不同的TC代码(它将继续增长)以及要求日期为“最大日期”的其余信息。

EX日志:

Job  Desc  TC CODE  Units   Date     Rqstr
17   MCD    Days     5     4/1/19    Fred
20   BK     Days     10    4/1/19    John
17   MCD    Crew     8     4/2/19    Bob
33   WEN    Days     10    4/1/19    Dave
40   ARB    Crew     7     4/3/19    Jim
40   ARB    Hours    10    4/3/19    Jim
17   MCD    Days     10    4/5/19    Tim
17   MCD    Con      5     4/5/19    Tim
20   BK     Days     8     4/8/19    Tye
20   BK     Crew     3     4/8/19    Tye
17   MCD    Crew     5     4/8/19    Tim

我尝试了行号,但是我不能真正地划分TC代码,因为每个工作也需要每个不同的代码。分区将仅返回不同的TC代码,并列出日期为最大日期的作业

select [Job],
  [Description],
  [TC Code],
  [Units],
  [Date Requested],
  [Requestor]

from (Select [Job],
  [Description],
  [TC Code],
  [Units],
  [Date Requested],
  [Requestor],
       row_number() over(partition by [TC Code] order by [Date Requested] 
desc) as rn
  from [dbo].['VAR ADJ Log$']) as t

where rn = 1      

我需要的结果:

我需要为每个作业返回每个带有最新日期的TC代码。在工作17上可以看到,引入并添加了一个新的TC代码,而Crew TC代码被最新的TC代码取代。

Job  Desc  TC CODE  Units   Date     Rqstr
17   MCD    Days     10    4/5/19    Tim
17   MCD    Crew     5     4/8/19    Tim
17   MCD    Con      5     4/5/19    Tim
20   BK     Days     8     4/8/19    Tye
20   BK     Crew     3     4/8/19    Tye 
33   WEN    Days     10    4/1/19    Dave
40   ARB    Crew     7     4/3/19    Jim
40   ARB    Hours    10    4/3/19    Jim

1 个答案:

答案 0 :(得分:0)

这是您想要的吗?

select val.*
from [dbo].['VAR ADJ Log$'] val
where val.date = (select max(val2.date)
                  from [dbo].['VAR ADJ Log$'] val2
                  where val2.job = val.job and val2.[TC Code] = val2.[TC Code]
                 );

您也可以使用窗口功能执行此操作(尽管可能没有特别的优势)。这似乎是您要求的逻辑。