我正在尝试找到一种更好的方法来制作水晶报告(其他人的)...按组添加不重叠的时间。
这显然是一个古老的问题......
有没有一种技术可以得到
- 调整每条记录的(开始/结束)时间,以消除共同/重叠时间,
- 亚组内
- --使用直接 SQL(尽管我发现我可以执行 CTE)
假设开始时间(和/或组、子组)的初始排序依据以及开始和结束是单独的字段。
一种图形示例:
Group 1
SubGroup A
Tkt 1 |--start&end---| "16"
Tkt 2 |----tart&end----| "18"
Tkt 3 |--art&end---| "14"
Tkt 4 |--S & E -| "11"
SubGroup B
Tkt 5 |-S&E-| "7"
Tkt 6 |-S&E-| "7"
Tkt 7 |-S&E-| "7"
...
(equiv adjusted start/end w/in sub-group):
Group 1
SubGroup A ( w/ "elapsed time" of "33" )
Tkt 1 |--start&end---| <- Regular "16"
Tkt 2 |-----| <- Adjusted "start" "6"
Tkt 3 | <- Adjusted "start" & "end" "0"
Tkt 4 |--S & E -| <- Regular "11"
SubGroup B ( w/ "elapsed time" of "17" )
Tkt 5 |-S&E-| <- Regular "7"
Tkt 6 |-S&E-| <- Regular (no overlap) "7"
Tkt 7 |-| <- Adjusted "Start" "3"
...
我现在不是在谈论求和,只是说明根据之前的记录调整开始/结束。
在报告中,他们针对组中第一条记录上设置的两个变量为每个记录执行多个公式,然后根据当前记录设置/更新调整开始、调整结束的值,并将调整开始、调整结束传递给另一个公式计算时间差,稍后求和。当前的技术很慢,我无法完成所需的漂亮交叉表。
我想/希望这个问题已经在 SQL 中得到解决,因为我们不能在数据库服务器上放置任何过程、临时表等。我正在尝试找出一种使用 CTE 和(重新)诅咒的方法,使用 Group/SubGroup 作为父系,并使用 CASE 来比较当前值与最后一个父值。这听起来是否合理?
水晶的能力有很多,但这似乎是它不适合的。
Marc
我正在凭空做这件事...
SELECT
CUR.subgroup,
CUR.ticket,
COALESCE(MAX(PARENT.end_time), CUR.start_time) AS start_time,
CASE
WHEN CUR.end_time < MAX(PARENT.end_time) THEN MAX(PARENT.end_time)
ELSE CUR.end_time
END
FROM
My_Table CUR
LEFT OUTER JOIN My_Table PARENT ON
PARENT.start_time <= CUR.start_time AND
PARENT.end_time > CUR.start_time AND
PARENT.ticket <> CUR.ticket AND
PARENT.subgroup = CUR.subgroup
GROUP BY
CUR.subgroup,
CUR.ticket,
CUR.start_time,
CUR.end_time
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)