2017-03-10 6 views
1

私はそうの私は、持っている。このタイムシートの日付に基づいてステータス値を取得します

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

に似た何かを見て...その資産の特定のステータスがステータスを変更したときの監査ログを持っている資産のテーブルを持っていますタイムシートテーブルにAssetIDと取引日付が入っています。私は基本的に、取引日現在のAssetIdと現在の設備投資状況に基づいて、AssetLogテーブルから設備投資ステータスを引き出したいと考えています。例えば。取引日が2月8日である場合、設備投資状況は「0」でなければならない。

私はこのような何かがそれを行うかもしれないと思うタイムシートテーブル

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

答えて

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 
+0

assetIdとのリンクがあると思われるdoes notの申し訳ありませんが...私は "追加しようとしましたal.assetId = t.assetId "レコード1はヌル値を返します –

+0

グレンが修正されました。 –

+0

こんにちは...私がこれを実行すると、CapexStatusがTimesheetId = 1のNULLになります。CapexStatusを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 
関連する問題