【发布时间】:2013-09-20 13:36:54
【问题描述】:
我在执行一个非常简单的任务时遇到了一些性能问题(执行速度),如下所述。我的代码在这里显示很愚蠢,所以我将详细解释问题:
考虑以下 sql 表,它存储了大约 12 年的每日降雨量数据:
历史数据
year, month, day, rainfall_observed
2001, 1, 1, 4
2001, 1, 2, 0
...
2012, 12, 31, 10
现在,考虑另一个结构相同但包含约 1 年每日预测数据的表:
预测
year, month, day, rainfall_forec
2013, 1, 1, 0
2013, 1, 2, 3
...
2013, 12, 31, 15
问题:对于每一天的预报数据,统计历史数据中相同的(月、日),使得rainbow_observed >rainum_forec。
示例
考虑预测条目
year = 2013, month = 3, day = 15, rainfall_forec = 10
然后我需要在 历史数据 中计算每个条目 month = 3 AND day = 15 WHERE rainfall observed > 10 (使用 SQL 很容易)。所以,我的输出是一个包含每个预测日计数的列表。
有很多方法可以做到这一点:
1 - 在 for 循环中使用 SQL 查询(每个预测日 1 个查询 = 循环中的 365 个查询 - 我还没有测试它)
2 - 查询所有观察到的数据并使用嵌套循环进行比较(~ 365 * 12 * 365 比较...)
3 - 将上述内容或一些数学与日期结合起来(但这里缺少数据是一个问题)
我目前正在使用选项 2,但我需要它更快。我会尝试选项 1,但也许我缺少更简单的解决方案。
所以,我感谢任何有关如何解决此问题的建议。谢谢!
【问题讨论】:
-
您需要的输出究竟是什么?只是一个 365 计数的列表?
-
是的,输出是一个计数数组,有 365 个项目。
标签: php sql postgresql