【发布时间】:2021-03-25 20:50:27
【问题描述】:
我有数据:
| StartDate | StartTime | EndDate | EndTime |
|---|---|---|---|
| 12/10/2020 | 09:00:00 | 12/13/2020 | 12:00:00 |
我想要如下输出:
| StartDate | StartTime | EndDate | EndTime | Duration |
|---|---|---|---|---|
| 12/10/2020 | 09:00:00 | 12/10/2020 | 23:59:59 | 14:59:59 |
| 12/11/2020 | 00:00:00 | 12/11/2020 | 23:59:59 | 23:59:59 |
| 12/12/2020 | 00:00:00 | 12/12/2020 | 23:59:59 | 23:59:59 |
| 12/13/2020 | 00:00:00 | 12/13/2020 | 12:00:00 | 12:00:00 |
在 T-SQL 中怎么可能?我正在运行 SQL Server 14.x 版本。
我的尝试:
With cte as(
Select [Start Date] StartDate ,
Case
When [Start Date] = [End Date] Then Duration
When [Start Date] != [End Date] Then DateDiff(MINUTE,[Start Time],'23:59:59')
End
as ShutdownTime
from [dbo].[Delay]
where
[Start Date]>=@StartDate and [Start Date]<= @EndDate
Union
Select [End Date] StartDate,
DateDiff(Minute,'00:00:00', [End Time])
as ShutdownTime
from [dbo].[Delay]
where [Start Date] !=[End Date]
and
[Start Date]>=@StartDate and [Start Date]<= @EndDate
)
Select StartDate, Sum(ShutDownTime/cast(60 as float)) ShutDownTime
from cte group by StartDate
如果少于 24 小时。它工作正常。但如果超过 24 小时,它就会失败。
【问题讨论】:
-
请不要将图像用于代码、数据或错误。使用格式化文本。请向我们展示您的尝试并解释您遇到的问题/
-
如果您阅读过Markdown help,那么您可以创建一个更好(看起来)的问题。现在你只需要提供一些关于你的尝试的信息并解释你的问题所在(就像戴尔问的那样)
-
我已经提供了我的尝试以及失败的原因
-
请解释持续时间的计算。
-
哎呀,我确实在将图片过度输入到文本时出错了......这导致了一些关于持续时间的问题......我现在会更正这个!
标签: sql sql-server tsql