根据时间表日期获取状态值

时间:2017-03-10 00:43:13

标签: sql sql-server

我有一个Assets表,其中包含一个审核日志,指出该资产的特定状态何时更改状态...所以看起来与此类似

AssetId     CapexStatus     Date
-------     -----------     -----
AM706       1               2017-02-03
AM706       0               2017-02-07
AM706       1               2017-02-10

然后我有一张时间表表,其中包含AssetID和交易日期。我基本上想根据AssetId和交易日期当前的资本支出状态将资本支出状态从资产日表中拉出来。例如。如果交易日期是2月8日,则资本支出状态应为“0”。

时间表表

TimesheetId     AssetId     TimesheetDate
-----------     -------     -------------
1               AM706       2017-02-01
2               AM706       2017-02-08
3               AM706       2017-02-12

2 个答案:

答案 0 :(得分:1)

我认为这样的事情可能会这样做:

select 
  t.*, 
  a.CapexStatus
from
  TimeSheet t
outer apply (Select top 1 * from AssetLog al
   where 
        al.AssetID = t.AssetID 
   and  al.Date < t.TimesheetDate
   order by al.Date desc) a

答案 1 :(得分:0)

create view vwMaxCapex
as
select top 1 capexStatus, date, AssetId from AssetsLog
order by date asc
go


select a.AssetId, a.timesheetDate, 
  (select capexstatus 
    from vwMaxCapex 
     where date<=a.timesheetDate and assetId=a.AssetId) capex
from timetable a