使用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
答案 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语句获取每小时平均值的数据,如下面的屏幕快照所示。