Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否存在这种类型的数据库?(与时间序列数据库一样,可以获取特定的时间点数据…)_Sql_Database_Time Series - Fatal编程技术网

Sql 是否存在这种类型的数据库?(与时间序列数据库一样,可以获取特定的时间点数据…)

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:

假设我有如下的数据结构

用户密钥是用户的唯一密钥 状态,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: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等。。。很抱歉选择了模糊词。