sql - SQL:您如何计算设施的占用率/使用中的数量?
问题描述
我正在尝试计算更衣室中占用的储物柜数量。数据集是这样的:
Locker ID Check-in Datetime Check-out Datetime Member ID
1 2/18/2021 08:15am 2/18/2021 10:20am A
2 2/18/2021 09:00am 2/18/2021 09:30am B
3 2/18/2021 09:15am 2/18/2021 11:05am C
4 2/18/2021 10:25am 2/18/2021 11:50am D
我的理想输出是每小时占用的储物柜数量:
Date Hour No. of Occupied Lockers
2/18/2021 8:00am - 9:00am 1
2/18/2021 9:00am - 10:00am 3
2/18/2021 10:00am - 11:00am 3
2/18/2021 11:00am - 12:00pm 1
我可以手动计算 excel 中的数字('一小时内的登记储物柜数量' + '一小时内使用的储物柜数量' - '一小时内退房的数量'),但我无法在 SQL-server 中计算它。我不知道如何找回号码。在上述等式中使用的储物柜。
“占用”是指当前正在使用的储物柜。例如,如果用户 A 在上午 8:30 签入(开始使用)储物柜,并在上午 10:30 退房(释放储物柜并停止使用),那么对于用户 A,将计算一个“占用”储物柜分别在上午 8:00 至上午 8:59、上午 9:00 至上午 9:59 和上午 10:00 至上午 10:59 期间。
解决方案
您需要生成小时数。然后就可以进行计算了。如果您想在一小时内的任何时间:
with dt as (
select convert(datetime, '2021-02-18 08:00:00') as dt
union all
select dateadd(hour, 1, dt)
from dt
where dt < '2012-02-18 11:00:00'
)
select dt,
(select count(*)
from t
where t.checkin < dateadd(hour, 1, dt.dt) and
t.checkout >= dt.dt
) as cnt
from dt;
推荐阅读
- html - 如果满足条件,HTML 显示文件列表
- c# - 使用 NETCore 2.1 在 Cognito 用户池中拒绝注册请求
- excel - 如何使用 ActiveCell & Formulas & Autofit Columns 简化代码?
- javascript - 基于值数组的嵌套 Firebase 查询 ASYNC 问题
- asp.net-mvc - 利用控制器和视图中的继承
- c# - 无法使用 Windows UWP 访问蓝牙特征值?
- mapping - 在本体之间映射类和属性
- javascript - 加载时背景图像不会“模糊”
- mysql - 按发票金额和物品总和订购客户
- mysql - ERROR 1064 (42000) 即使在教科书代码中