Sql 是否存在这种类型的数据库?(与时间序列数据库一样,可以获取特定的时间点数据…)
假设我有如下的数据结构 用户密钥是用户的唯一密钥 状态,1处于联机状态,0处于脱机状态 更新日期是状态最后更新日期Sql 是否存在这种类型的数据库?(与时间序列数据库一样,可以获取特定的时间点数据…),sql,database,time-series,Sql,Database,Time Series,假设我有如下的数据结构 用户密钥是用户的唯一密钥 状态,1处于联机状态,0处于脱机状态 更新日期是状态最后更新日期 USER_KEY | STATUS | UPDATED_DATE ---------------------------------------- 1 | 1 | 2017-06-19 00:01:00 2 | 1 | 2017-06-19 00:01:01 3 | 1 | 2017-06-19 00:
USER_KEY | STATUS | UPDATED_DATE
----------------------------------------
1 | 1 | 2017-06-19 00:01:00
2 | 1 | 2017-06-19 00:01:01
3 | 1 | 2017-06-19 00:01:02
4 | 1 | 2017-06-19 00:01:02
1 | 0 | 2017-06-19 05:42:06
我想得到具体的时间点数据
当我选择“2017-06-19 04:00:00”
实时用户数为4
实时用户是{1,2,3,4}
当我选择“2017-06-19 11:00:00”时,
实时用户数为3
实时用户是{2,3,4}
因为用户1在上午5:42脱机
我想得到具体的时间点数据。
到目前为止,我每小时都在保存用户状态数据。
这些数据太大,效率太低。
exist数据库是否可以有效保存此类数据
当然,每次都可以保存count number,但我不仅需要count,还需要所有用户的密钥。您正在查找每个用户在给定时间点之前的最后状态。在SQL Server中,可以使用窗口函数:
select count(*)
from (select t.*,
row_number() over (partition by user_key order by updated_date desc) as seqnum
from t
where updated_date < @datetime
) t
where seqnum = 1 and status = 1;
如果需要用户列表,可以说选择*
我不知道你所说的数据库类型是什么意思。您可以在标准SQL中轻松地执行此操作。编辑您的问题,并使用您正在使用的数据库标记您的问题。@GordonLinoff我正在使用SQL Server,但这不是关于SQL Server的。这个问题如何不是关于SQL Server的。每个数据库的sql语法都不一样,只是每小时保存一次用户状态,真的没有其他方法可以做到这一点,谢谢您的回答。”“数据库类型”是指另一个数据库,如XDB、postgresql等。。。很抱歉选择了模糊词。