CacheSQL рассчитать общее время

Я рассчитываю рассчитать общее время из столбца, похожего на этот форум:

https://stackru.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 ответ

Решение

Я не уверен, поможет ли это вам или кому-то другому. В 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 ]

Там вы получите свойства в качестве входных данных для вашего метода класса, вместо получения идентификатора и вызова..%Open(Id).

В любом случае, вы можете использовать полученное вычисленное свойство даже для индексов.

Другие вопросы по тегам