首页 > 解决方案 > 如何返回具有最大日期的动态表

问题描述

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

前日志:

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 代码。正如您在 Job 17 中看到的那样,引入并添加了新的 TC 代码,并将 Crew 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

标签: sqlsql-server

解决方案


这是你想要的吗?

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]
                 );

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


推荐阅读