2016-04-21 71 views
2

我有一个数据表,其中包含请求的步骤历史记录。如何计算数据表上的状态之间的天数

下面是数据的一个例子:

enter image description here

我需要怎么每个状态之间的天数已通过天的地方。

当然,如果只有一个状态,则天应采用交易发生日和今天的日期之间经过的天。

任何线索?

+0

你想在C#或SQL中做到这一点? – Andrei

+0

[这个答案](http://stackoverflow.com/a/34138229/718373)看起来是迎合SQL中类似的东西,请看一看。 – fujiFX

+0

在C#,SQL也将是非常好的 – VAAA

回答

0

这可能会帮助您解决问题: 通过集合的迭代,从当前行中减去前一行的日期列值.TotalDays()将返回一个双值表示日差异。这可以实现如下:

var temTable = myDatatable.AsEnumerable().Select(x => x).ToList(); 
for (int i = 0; i < temTable.Count; i++) 
{ 
    double days = 0; 
    if (i != 0) 
     days = ((DateTime)temTable[i]["date"] - (DateTime)temTable[i - 1]["date"]).TotalDays; 
    temTable[i]["days"] = days; 

} 
0
SELECT r.dDate,r.dHour,r.dStatus,DATEDIFF(
DAY,LAG(r.dDate,1,GETDATE()) 
OVER (ORDER BY r.dDate),r.dDate) AS DAYS 
FROM tbData r; 

我相信,上述在SQL Server查询将提供所需的输出。 但是为了用新列“天”更新表,需要一些额外的/其他的代码。我仍在努力。如果你得到了解决,请上传... 我没有花时间在我的考虑......你加太.... 您可以使用字段类型日期时间(更换日期和时间) ,会降低风险....

+0

SELECT dDate,dHour,dStatus,DATEDIFF( DAY,LAG(dDate,1,GETDATE()) OVER(ORDER BY dDate),dDate)AS天TBDATA; =>给出类似的结果 –

0
WITH newTable AS (
SELECT dStatus,ABS(DATEDIFF(
DAY,LAG(dDate,1,GETDATE()) 
OVER (ORDER BY dDate),dDate)) AS dDays FROM tbData 
) 
UPDATE tbData SET dDays=nt.dDays 
FROM newTable nt 
WHERE nt.dStatus = tbData.dStatus; 

我相信这将解决问题..... 小时现场不被视为.....谢谢....

相关问题