使用excel和ms查询从过程数据库中提取每小时数据

时间:2018-07-26 19:20:42

标签: sql excel ms-query

使用SQL以及在特定情况下的MS查询是我的新手。我必须使用excel和ms查询从工厂数据库中提取数据,该数据库每5-7秒记录一次数据。为了能够完成我的分析,我必须使用一年的数据集。但是,当然,一年之内不可能每5秒记录一次所有值。因此,我想每小时仅提取一个值(可以是一个值,也可以是过去一小时中所有数据的平均值),但是我没有成功。我尝试使用GROUP BY,但仅收到错误。我看到有人使用DATEADD,但是使用SQL语言,不适用于ms查询。因此,如果您有解决方案?

根据要求,一些更多信息: -我的组织限制了我们可以使用的软件和可以安装的软件。这就是在Excel中选择MS查询的原因。由于IT部门不允许,我不确定是否可以安装其他任何东西,尤其是用于访问数据库的东西。 -如我所料,我仅使用2个字段,即time_field和value_field。数据是这样的:

IP_TREND_TIME       IP_TREND_VALUE
01/01/2018 00:00    26.05134583
01/01/2018 00:00    28.601511
01/01/2018 00:00    25.26741219
01/01/2018 00:00    28.2553215
01/01/2018 00:00    25.7881279
01/01/2018 00:00    22.28141594
01/01/2018 00:01    25.02994537
01/01/2018 00:01    25.80338669
01/01/2018 00:01    28.67017555
01/01/2018 00:01    29.755476
01/01/2018 00:01    27.90055084
01/01/2018 00:01    30.32291794
01/01/2018 00:02    29.48653221
01/01/2018 00:02    29.06977081
01/01/2018 00:02    28.34592438
01/01/2018 00:02    24.93743706
01/01/2018 00:02    25.89684677
01/01/2018 00:02    29.04116058
01/01/2018 00:03    28.382164
01/01/2018 00:03    26.18581581
01/01/2018 00:03    26.03513527

我当前的查询是:

SELECT TREND_TIME, TREND_VALUE
FROM my database
WHERE TREND_TIME>? And TREND_TIME<?
ORDER BY TREND_TIME

正如您在数据列表中看到的那样,我有很多行,并且想从该列表中仅提取一行,可以是一个值或小时中所有值的平均值。而且如上所述,不幸的是,DATEADD在MS QUery中是众所周知的。...

希望这次我的解释更加清晰 谢谢并恭祝安康 Makol

1 个答案:

答案 0 :(得分:0)

您是否有使用MS Query的理由?使用其他应用程序查询数据并将其导出为CSV,然后在Excel中打开它可能会更好。如果您使用的是Microsoft SQL服务器,则SSMS会很好地工作。如果需要使用MS查询,我仍然建议在另一个客户端中开发查询,然后将SQL语句复制到MS查询中,而不是尝试在此处构建查询。

假设您的SQL表有2列(时间戳和数据),则这样的查询可能有效:

SELECT
    DATEADD(hour, DATEDIFF(hour, 0, [TimeStamp]), 0) as [Hour],
    AVG([TrendValue]) AS [Avg(Data)]
FROM
    [ProcessData]
WHERE
    [TimeStamp] BETWEEN '2018-01-01' AND '2018-01-02'
GROUP BY
    DATEADD(hour, DATEDIFF(hour, 0, [TimeStamp]), 0)

编辑:

即使您的IT部门限制性很强,我也会询问使用SQL Server Management Studio的问题。它是Microsoft直接提供的100%免费的实用程序。我曾在一家具有限制性IT的公司工作,该公司花了几个月的时间才能批准软件,如果他们完全同意的话。 SSMS已预先获得批准,他们在我要求它的几个小时内为我安装了它。

尽管保留在MS Query中,但是您可以单击顶部的SQL按钮来编辑原始SQL查询。我每隔5分钟将一些带有值的随机数据放入数据库中进行测试。通过MS Query,我能够使用上面的SQL语句获取每小时平均值的数据,如下面的屏幕快照所示。

Working SQL query within MS Query