2

リソースに関する情報を含むテーブルがあります。基本は次のとおりです。

ID    Total    Start        End          Used
----------------------------------------------
1     350      01-01-2012   31-12-2012   80.6%
2     250      01-01-2012   31-12-2012   51.5%
3     3500     01-01-2012   31-07-2013   12.5%
4     350      01-01-2012   31-10-2012   91.0%

列は次のとおりです。

  • Total-- リソースの総数 (通貨、時間、紙など)。
  • Start-- リソースの開始日
  • End-- リソースの終了日
  • Used-- 現在までに使用されたリソースの割合

これまでに使用した速度でリソースがいつなくなるかを計算 (または推定) する必要があります。

使用されたパーセンテージとパーセンテージを使用していくつかの異なる方法を試しましたが、何も意味がありません。これを行う簡単な方法があると確信していますが、それを見つけることができません。

私の理想的な出力は以下のテキストですが、おそらくアプリケーションでフォーマットします。

You have used X% of your [resource name] in Y% of the time allotted, 
at this rate the resource will run down around [Run Down Date].

これをどのように計算できるか、誰でも理解できますか?

遊ぶSQLフィドル

編集:

問題をより明確にするために、単一の日付を計算する方法を説明します。

最初の行 (ID = 1)。

Average % per day = Percentage (80.6) / Days between Start and Today (205)
Average % per day = 0.003931707%

% remaining = Percentage (80.6%)
% remaining = 19.4%

Days remaining = Average % per day (0.003931707%) / % remaining (19.4%)
Days remaining = 49.34243176

Project Run Down = Today + Days Remaining (49.34243176)
Project Run Down = 11/09/2012 (11th Sep)

このプロセスを SQL に変換しようとしましたが、うまくいきません。

4

3 に答える 3

2

あなたはこのようなことを試すことができます

declare @res table(
    id int identity(1,1)
    ,total int
    ,start date
    ,[end] date
    ,used float )


insert into @res(total, start , [end], used) 
values
    (350, '20120101', '20121231', 0.806)
    ,(250, '20120101', '20121231', 0.515)   


select 
*
,used/DATEDIFF(DAY,start,GETDATE()) as avUsePerDay
,1/(used/DATEDIFF(DAY,start,GETDATE())) as expectedDaysTotal
,DATEADD(day,1/(used/DATEDIFF(DAY,start,GETDATE())),start) as expectedToDie
from @res
于 2012-07-24T14:48:59.260 に答える
1

それは...

SELECT DATEDIFF(d, [StartDate], GETDATE()) * 100.0 /  DATEDIFF(d, [StartDate], [EndDate]) AS PercentageTimeGone,
       DATEADD(d, (100 - USED) / (Used / DATEDIFF(d, [StartDate], GETDATE())), GETDATE()) AS ProjectedEndingDate
FROM Resources 
于 2012-07-24T13:51:19.860 に答える
0

何について

select id, total, start, end, datediff(day,start,getdate()) / ( total / 100 )

計算は苦手だけど、数字的には大丈夫。

ではごきげんよう

于 2012-07-24T13:43:52.787 に答える