【问题标题】:SQL -- Derive Date Difference ColumnSQL——派生日期差异列
【发布时间】:2010-07-08 16:22:38
【问题描述】:
+--------+--------------+ |进程 |结束时间 | +--------+--------------+ |一个 | 2010/01/01 12:10:00.000 | |乙| 2010/01/01 12:08:00.000 | | C | 2010/01/01 12:05:00.000 | | D | 2010/01/01 12:02:00.000 | | ...| ... |

所以基本上我从数据库中提取的数据将类似于上面的内容,第一列是进程的名称,第二列是它完成运行的时间。我想添加第三列,它显示进程的运行时间。

基本上,我希望拉取的数据看起来像这样:

+--------+--------------+--------------+ |进程 |结束时间 |运行时间 | +--------+--------------+--------------+ |一个 | 2010/01/01 12:10:00.000 | | (进程 a 未完成运行) |乙| 2010/01/01 12:08:00.000 | 00:03:00.000 | | C | 2010/01/01 12:05:00.000 | 00:03:00.000 | | D | 2010/01/01 12:02:00.000 | 00:02:00.000 | (假设开始时间为 12:00) | ...| ... | ... |

而且我知道添加startTime 列并从中确定runningTime 会更容易,但我无权更改它,并且无论如何旧数据都没有 startTime 可以使用.

第一个进程的开始时间是任意的,但你明白我在说什么。我们根据 proc D 结束的时间和 proc C 结束的时间(从第二个减去第一个)来知道 proc C 的运行时间。

如何根据“Row X Col B”和“Row X-1 Col B”之间的差异计算第三行?

【问题讨论】:

  • 这看起来像 MySQL 结果 - 你使用的是什么 DBMS?
  • Microsoft SQL Server,我想我应该说清楚。
  • 您已将其标记为 SQL,而不是 MySQL - 只是您的示例输出在我看来类似于 MySQL。我不知道是否可以复制我在 MS SQL 中使用的 MySQL 方法,因为它不允许在也返回数据的 SELECT 中分配变量。

标签: sql sql-server date calculated-columns


【解决方案1】:

我认为您不能将其添加为“计算列”。您可以像这样在视图中轻松计算它(MSSQL 的所有代码。您的转换函数可能会有所不同):

select 
    e1.RowID, 
    e2.EndTime as StartTime, 
    e1.EndTime, runningtime=convert(varchar(20), e1.EndTime - e2.EndTime, 114)
from endtimetest e1
    left join endtimetest e2 on e2.endtime = 
            (Select max(endtime) 
              from endtimetest 
              where endtime < e1.Endtime) 

或者,您可以使用类似的触发器在触发器中计算它。

【讨论】:

  • 我选择了这个。因为记录多,所以需要一段时间,但它完成了任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 2018-05-09
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多