繁体   English   中英

使用SQL SELECT,如何显示设置时间彼此分开的记录

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

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

每个表都包含一个由PLC打孔的温度值。

PLC每分钟发送一次数据。

但是,客户希望在趋势表上绘制当天或一周的报告,并仍在图表下方显示表格,并在图表中显示值。

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

这让我有一个问题。 如何执行SELECT语句以仅每30分钟显示一次值?

示例表具有以下字段:

[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将选择分钟为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

对其进行了调整,以允许没有读数的插槽-也许他们应该说不适用或不在

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM