CacheSQL计算总时间

时间:2012-09-04 21:29:57

标签: intersystems-cache intersystems

我正在计算与此论坛相似的列的总时间:

https://stackoverflow.com/questions/3054943/calculate-sum-time-with-mysql

这是我的代码无效:

SEC_TO_TIME(SUM(TIME_TO_SEC(CASE WHEN (SUBSTR(Total_Time,1,2) - 
SUBSTR(ActivityTime,1,2)) < 0 
THEN '0' || DATEDIFF(hh,Total_Time,ActivityTime)-1 || ':' || DATEDIFF(mi,Total_Time,ActivityTime)
WHEN (SUBSTR(Total_Time,1,2) - SUBSTR(ActivityTime,1,2)) >= 0
THEN '0' || DATEDIFF(hh,Total_Time,ActivityTime) || ':' ||
DATEDIFF(mi,Total_Time,ActivityTime)
END))) AS TotalVariance,

任何帮助都会很棒!谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定这对你或某人是否有帮助。 ObjectScript中有Calculated / SqlComputed属性。基本上,您可以定义如下属性:

Property TotalTime As %Integer [ Calculated, SqlComputeCode =
        {s {TotalTime}=##class(SomeClass).SomeClassMethod({Id})}, SqlComputed ]

现在你只需编写SomeClassMethod。它可以继续任何ObjectScript代码,包括%Open,只是不要使它循环。如果您只需要其他一些字段来制作它,您可以这样:

Property TotalTime As %Integer [ Calculated, SqlComputeCode =
        {s {TotalTime}=##class(Some).SomeCM({PropA}, {PropB})}, SqlComputed ]

在那里,您将获得属性作为类方法的输入,而不是获取ID并调用..%Open(Id)。

无论哪种方式,即使对于索引,也可以使用生成的计算属性。