数据:
sql server 2012-我需要“扫描”如上所示的表,并对duration列求和,直到paycode列中有“break”的行为止。
然后在“break”行之后继续汇总duration列
i、 我想得到的结果
Sum of Duration
---------------
6.08
3.33
我尝试了这个语句,但它没有返回上面所期望的结果:
SELECT duration, paycode, visitstart
INTO #client
FROM VISITS
WHERE visitstart > '2020-01-20'
AND visitstart < '2020-01-21'
AND paycode <> 'BREAK'
ORDER BY VISITSTART, CLIENT_ID
SELECT SUM(duration) AS total_duration, visitstart, paycode
FROM #client
GROUP BY visitstart, paycode
DROP TABLE #client
请告知
3条答案
按热度按时间vhmi4jdf1#
试试下面的那个-这是一个
gap & island
问题wtlkbnrh2#
您可以通过对“break”出现的次数求和来分配组。然后你就可以聚合了。我不太确定最终的持续时间是如何定义的——特别是是否包含“break”行。假设是:
oxf4rvwz3#
所以,史蒂夫c,我试着帮你。。。我做了几次cte
cte(ctebreak)-您只需选择中断。
cte(breaks\u chains)-为每个中断编号(因为不能使用行\u numbing)
断链-成对获得断链间隔(例如时间第一次断链-时间第二次断链,时间第二次断链-时间第三次断链)
注意:如果它是最后一个间隔,那么列结束符将替换为getdate(),只是为了关闭间隔
最后,我们将我们的表与表类型(而不是表名)结合起来
p、 如果你有问题,请写在评论中)