什么是一个很好的算法来操作大量的DateTime记录

本文关键字:算法 操作 记录 DateTime 很好 一个 什么 | 更新日期: 2023-09-27 18:08:15

我有一个SQL server表,格式为

DATA,Startdatetime,Enddatetime

这意味着我的传感器在StartdatetimeEnddatetime的持续时间内处于DATA状态。我有很多这样的数据。那么,是否存在任何算法或类或查询方法(在c#级别或SQL级别),我可以在特定时间询问我的传感器状态是什么?

什么是一个很好的算法来操作大量的DateTime记录

在SQL中,如果你想要的数据,例如'2015-08-16 17:33:45'

select data
from your_table
where '2015-08-16 17:33:45' between Startdatetime and Enddatetime

将另一个答案扩展为您的额外要求,即能够在多个时间点上执行此操作:

DECLARE @startDate DATETIME2(0) = '2015-01-01',
    @endDate DATETIME2(0) = '2016-01-01',
    @intervals INT;
SELECT @intervals = 2 * DATEDIFF(MINUTE, @startDate, @endDate) + 1;
WITH pointsInTime AS (
    SELECT DATEADD(SECOND, 30*(n-1), @startDate) AS p
    FROM dbo.[Numbers] AS [n]
    WHERE n < @intervals
)
SELECT p.p, t.DATA
FROM [pointsInTime] AS p
LEFT JOIN dbo.yourTable AS t
    ON p.p >= StartDateTime AND p.p <= EndDateTime;

其中dbo.Numbers为沼泽标准计数表。这里的想法是使用统计表生成30秒间隔,然后使用它来驱动数据的选择。注意:我使用左连接是因为我不知道给定的数据点是否有数据的保证。如果您不需要在结果集中显示这样的时间,您可以安全地将其更改为内部连接。