使用Microsoft SQL Server仅使用百分比计算运行日期

使用Microsoft SQL Server仅使用百分比计算运行日期,sql,sql-server,sql-server-2008,tsql,datetime,Sql,Sql Server,Sql Server 2008,Tsql,Datetime,我有一个关于资源信息的表格,基本内容包括: 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

我有一个关于资源信息的表格,基本内容包括:

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
    ——资源的总数(货币、时间、纸张等)
  • 开始
    ——资源的开始日期
  • 结束
    ——资源的结束日期
  • 已使用
    ——到目前为止已使用资源的百分比
我必须尝试计算(或估计)资源何时会以目前使用的速度用完

我已经尝试了几种不同的方法来使用使用的百分比和百分比,但没有任何意义,我非常确定有一种简单的方法可以做到这一点,它盯着我的脸,但我找不到它

我的理想输出是以下文本,但我可能会在应用程序中设置格式:

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].
有人能计算出这个数字吗

编辑:

为了让问题更清楚,我将解释如何计算单个日期:

对于第一行(ID=1)

我已尝试将此过程转换为SQL,但无法使其正常工作。

有什么问题

select id, total, start, end, datediff(day,start,getdate()) / ( total / 100 )
我不擅长计算,但从数字上看,这是可行的

最好的

就是

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 

你可以试试这样的

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

这将返回一个不正确的值,请参阅我的编辑以获得进一步的解释。我需要返回资源将耗尽的日期,而不是一个数字。当在客户端上更容易收集数据和执行计算时,为什么要以DB为单位计算此值?abatishchev-仅仅因为更容易并不能使其正确。我将使用一个计划包发送电子邮件提醒,该邮件将绑定对于视图/sp,这需要在db端完成,调度包只有非常简单的工具。标题最初包含“MS-SQL”,因为许多人不将标记“SQL server”与MS产品关联。然后marc_s将其更改为不太有用。这看起来很有希望,检查了两个示例,并且工作正常。
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