【发布时间】:2015-02-12 09:54:45
【问题描述】:
我有以下 3 个查询。第一个从数据总量中取出相关数据:
SELECT
(n()-1)*[Forms]![f_Main]![PowerBinCombo] & ' - ' & n()*[Forms]![f_Main]![PowerBinCombo] & " kW" AS Bin,
q_DataLimited.POW001,
q_DataLimited.WSP001,
q_DataLimited.POW002,
q_DataLimited.WSP002
FROM q_DataLimited
WHERE
(
((q_DataLimited.POW001)>(n()-1)*[Forms]![f_Main]![PowerBinCombo]
And (q_DataLimited.POW001)<n()*[Forms]![f_Main]![PowerBinCombo]
)
AND (([Forms]![f_Main]![BinOnTurbine])='Reference Turbine')
AND ((q_DataLimited.[VG's])='Without')
)
OR
(
(
(q_DataLimited.POW002)>(n()-1)*[Forms]![f_Main]![PowerBinCombo]
And (q_DataLimited.POW002)<n()*[Forms]![f_Main]![PowerBinCombo]
)
AND (([Forms]![f_Main]![BinOnTurbine])='Power Curve Upgraded Turbine')
AND ((q_DataLimited.[VG's])='Without')
);
以及计算平均值和标准差的查询:
SELECT q_PowerBinned.Bin, Avg(q_PowerBinned.POW001) AS AvgOfPOW001, StDev(q_PowerBinned.POW001) AS StDevOfPOW001, Avg(q_PowerBinned.WSP001) AS AvgOfWSP001, StDev(q_PowerBinned.WSP001) AS StDevOfWSP001, Avg(q_PowerBinned.POW002) AS AvgOfPOW002, StDev(q_PowerBinned.POW002) AS StDevOfPOW002, Avg(q_PowerBinned.WSP002) AS AvgOfWSP002, StDev(q_PowerBinned.WSP002) AS StDevOfWSP002, Count(q_PowerBinned.Bin) AS CountOfBin
FROM q_PowerBinned
GROUP BY q_PowerBinned.Bin;
我想将值移动到表格中。为此,我在 Access 中使用附加查询。 SQL 看起来像:
INSERT INTO t_Average_Stored ( Bin, PowAvg001, WindAvg001, PowAvg002, WindAvg002, n_samples, PowDev001, WindDev001, PowDev002, WindDev002 )
SELECT q_Average_Temp.Bin, q_Average_Temp.AvgOfPOW001, q_Average_Temp.AvgOfWSP001, q_Average_Temp.AvgOfPOW002, q_Average_Temp.AvgOfWSP002, q_Average_Temp.CountOfBin, q_Average_Temp.StDevOfPOW001, q_Average_Temp.StDevOfWSP001, q_Average_Temp.StDevOfPOW002, q_Average_Temp.StDevOfWSP002
FROM q_Average_Temp;
它是如何组合成一个 SQL 的?
我的 SQL 还不强,所以我很难结合一些查询来优化它们。我希望能简要说明答案背后的原因,以便将其应用于其他类似的 SQL 语句。
提前谢谢你。
埃米尔。
这可以更智能/更快地完成吗?
我使用它的示例:
【问题讨论】:
-
为什么需要这个?第三个表显然违反了规范化规则,使用列而不是行。通过存储计算值也忽略了数据库设计的基础。为什么你必须这样做?除此之外,为什么要使用子查询?在我看来,以上应该更有效。
-
1) 我使用“我的”软件的经验表明,尽管查询中有操作,但实际的 openquery 需要时间。因此,我想尝试尽可能多地合并为一个,因为我不在那里使用中间值。这是一个动作,分三步。可以这么说,我希望它是 1 步中的 1 个动作。 2)我存储值,因为它是对数据的分析。我计算不同范围内的不同事物并存储它们以便能够对其进行可视化绘图以及一些我需要这些值的计算。 3)请详细说明您所说的违反规则是什么意思? :)
-
为了记录,该程序应该更多地被视为一个分析工具,而不是一个数据库,访问是好的。问题是随着我内置更多功能,它变得非常慢。我已经从该工具中添加了一份报告 (PDF),因此您可以查看它的计算示例,以便于理解。
-
我无法编辑我的回复,但我上传了一些我用我存储的表格制作的一些图表的图片。(没有 pdf)
-
@PaulFrancis 数据的非规范化和计算值的存储并不总是自动“错误”。我一直在关注埃米尔最近提出的一些问题,我同意他在他的具体案例中试图做的事情。这两件事都不应该粗心大意,但出于实际原因 - 特别是在性能方面 - 它们有时是必要的。