Sql Postgres查询每日入住率?
表e_log中有time_event(timestamp)和event_type两列(“e”或“X”表示进入或退出)。晚上没有人,所以在给定的一天,入住率是Es减去Xs,其中time_事件是当天。我试图查询2019年每天的入住率,结果应该是 日入住率Sql Postgres查询每日入住率?,sql,postgresql,select,Sql,Postgresql,Select,表e_log中有time_event(timestamp)和event_type两列(“e”或“X”表示进入或退出)。晚上没有人,所以在给定的一天,入住率是Es减去Xs,其中time_事件是当天。我试图查询2019年每天的入住率,结果应该是 日入住率 2019-01-01 14 2109-01-02 22 . . . 有什么建议吗?最接近的是对每个特定的日子进行硬编码并计算条目的数量,但我不确定如何获得当天条目-出口最大值的点。例如,此查询将始终返回0,因为每个人都会在午夜前离开- sele
2019-01-01 14
2109-01-02 22
.
.
. 有什么建议吗?最接近的是对每个特定的日子进行硬编码并计算条目的数量,但我不确定如何获得当天条目-出口最大值的点。例如,此查询将始终返回0,因为每个人都会在午夜前离开-
select sum(case when event_type ='E' then 1 else -1 end)
from e_log
where e_log.time_event > cast('2019-01-01 00:00:00' as timestamp) and
e_log.time_event < cast('2019-01-01 23:59:00' as timestamp);
选择sum(事件发生时的情况_type='E',然后是1 else-1 end)
从e_日志
其中e_log.time_event>cast('2019-01-01 00:00:00'作为时间戳)和
e_log.time_事件
谢谢你的建议 根据一天中的最高入住率进行编辑
with data
as(
select cast(e_log.time_event as date) day_val
,e_log.time_event
,sum(case when event_type ='E' then 1
when event_type='X' then -1
end) over(partition by cast(e_log.time_event as date) order by e_log.time_event) as total_occupancy
from e_log
)
,ranked_by_max_occupancy
as (
select row_number() over(partition by day_val order by total_occupancy desc) as rnk
,*
from data
)
select *
from ranked_by_max_occupancy
where rnk=1
更新的dbfiddle链接
你的思路是正确的,只需要按演员(时间事件为日期)分组,如下所示
select cast(e_log.time_event as date)
,sum(case when event_type ='E' then 1
when event_type='X' then -1
end) as total_occupancy
from e_log
group by cast(e_log.time_event as date)
小提琴链接
如果我理解正确,我倾向于这样写:
select date_trunc('day', time_event) as dte,
(count(*) filter (where event_type = 'E') -
count(*) filter (where event_type = 'X')
)
from e_log l
where e.time_event >= '2019-01-01'::timestamp
e.time_event < '2020-01-01'::timestamp
group by dte
order by dte;
选择日期(日期、时间、事件)作为dte,
(计数(*)过滤器(其中事件类型='E')-
计数(*)筛选器(其中事件类型='X')
)
从e_log l
其中e.time_event>='2019-01-01'::时间戳
e、 时间事件<'2020-01-01'::时间戳
按dte分组
dte订购;
谢谢,这是按天分组的,但我仍然不知道如何获得入住率。这将导致每天0,因为每个人都会在午夜前离开。考虑这种情况- 1月1日表有四个条目2019-01-01 11:00 00′E′2019-01-01 11:01O'x' 2019-01-01 11:02:'E'2019-01-01 11:03'x'占用不超过1。但如果按时间排序的条目是“E”、“E”、“X”、“X”,那么截至11:01,占用率为2。我想不出一个方法来做这个,也许是某种功能?有什么想法吗?如果你看到的是一天中入住率最高的时间,那么可以使用以下分析功能。请看一看,如果它解决了,请将答案标记为正确答案