使用SQL SELECT,我如何显示设置时间间隔的记录

Using SQL SELECT, how do I display records with set time apart from each other

我目前正忙于构建一个监视一堆 table 的小型应用程序。

每个 table 包含由 PLC 输入的温度值。

PLC每分钟发送一次数据

然而,客户希望根据趋势绘制当天或一周的报告 table 并仍然在图表下方显示一个 table 以及图表中描述的值。

所以挑战在于,如果您查看一天 (1440) 甚至更糟的一周 (10080),报告 table 将变得太长并且将其绘制在趋势上 table A4/Letter 页面的宽度(即使是横向的)至少可以说是愚蠢的。客户知道这一点,所以他问我是否可以绘制每半小时的值。

这就剩下我的问题了;我如何做一个 SELECT 语句来只显示每 30 分钟的值?

示例 Table 具有以下字段:

[ID] [int] IDENTITY(1,1) NOT NULL,
[Date] [datetime] NOT NULL CONSTRAINT [DF_SAPO_T3_Date]  DEFAULT (getdate()),
[Air1] [decimal](5, 2) NULL,
[Name] [varchar](50) NULL,
[Email] [varchar](100) NULL,
[Number] [nvarchar](16) NULL,
[InAlarm] [bit] NULL,

任何帮助都会很棒。 谢谢

SELECT *
  FROM tableName      
  WHERE DATEPART(MI,[DATE]) % 30 = 0
     AND [DATE] < maxDate AND [DATE] > minDate

上面的 sql 将 select 分钟为 0 或 30(或 30 的任何其他倍数)的每个条目,假设你真的每分钟都在轮询,应该满足你的需要.不过,它不会汇总中间的数据,因此如果您想要每个 30 分钟间隔的平均值,则需要不同的 SQL.

我想你要做的是计算每 30 分钟的平均值

    DECLARE @StartTime AS DATETIME = '20160101';
    DECLARE @EndTime AS DATETIME = '20160108';

    WITH SLOTS AS (SELECT @STARTTIME AS T 
                    UNION ALL
                    SELECT DATEADD(n,30,T) FROM SLOTS WHERE DATEADD(n,30,T) < @EndTime)

        select S.T, COALESCE(AVG(Y.AIR1),0) AS Av_Temp  from slots S LEFT join YourTable Y ON S.T <= Y.[Date] AND Y.Date < DATEADD(n,30,S.T)
        GROUP BY S.T

调整它以允许没有读数的插槽,可能 - 也许他们应该说 N/A 或者不在那里