【问题标题】:MySQL query to get array of averages of each month's dataMySQL查询以获取每个月数据的平均值数组
【发布时间】:2014-06-06 07:01:46
【问题描述】:

我有一个名为historical_currencies_rate 的表,我在其中保存了一些已知货币的最近 8 年汇率。例如(欧元兑美元)。表格是这样的

+---------------------------+---------------+------------+
|       rate_date           | currency_pair |    rate    |
+---------------------------+---------------+------------+
|       2006-01-01          |    EUR-USD    |  1.1797    |
|       2006-02-01          |    EUR-USD    |  1.1826    |
|       2006-03-01          |    EUR-USD    |  1.1875    |
|       2006-04-01          |    EUR-USD    |  1.2083    |
|       2006-05-01          |    EUR-USD    |  1.2088    |
|       2006-06-01          |    EUR-USD    |  1.2093    |
|       2006-07-01          |    EUR-USD    |  1.2093    |
|       2006-08-01          |    EUR-USD    |  1.2093    |
|       2006-01-01          |    JPY-USD    |  0.01275   |
|       2006-02-01          |    JPY-USD    |  0.01275   |
|       2006-03-01          |    JPY-USD    |  0.01275   |
|       2006-04-01          |    JPY-USD    |  0.01275   |
|       2006-05-01          |    JPY-USD    |  0.01275   |
|       2006-06-01          |    JPY-USD    |  0.01275   |
|       2006-07-01          |    JPY-USD    |  0.01275   |
|       2006-08-01          |    JPY-USD    |  0.01275   |
|       2006-01-01          |    GBP-USD    |  1.559     |
|       2006-02-01          |    GBP-USD    |  1.559     |
|       2006-03-01          |    GBP-USD    |  1.559     |
|       2006-04-01          |    GBP-USD    |  1.559     |
|       2006-05-01          |    GBP-USD    |  1.559     |
|       2006-06-01          |    GBP-USD    |  1.559     |
|       2006-07-01          |    GBP-USD    |  1.559     |
|       2006-08-01          |    GBP-USD    |  1.559     |
|       2006-01-01          |    AUD-USD    |  1.0515    |
|       2006-02-01          |    AUD-USD    |  1.0515    |
|       2006-03-01          |    AUD-USD    |  1.0515    |
|       2006-04-01          |    AUD-USD    |  1.0515    |
|       2006-05-01          |    AUD-USD    |  1.0515    |
|       2006-06-01          |    AUD-USD    |  1.0515    |
|       2006-07-01          |    AUD-USD    |  1.0515    |
|       2006-08-01          |    AUD-USD    |  1.0515    |
|       2006-01-02          |    EUR-USD    |  1.2092    |
|       2006-02-02          |    EUR-USD    |  1.2066    |
|       2006-03-02          |    EUR-USD    |  1.2061    |
|       2006-04-02          |    EUR-USD    |  1.2061    |
|       2006-05-02          |    EUR-USD    |  1.2061    |
|       2006-06-02          |    EUR-USD    |  1.1981    |
|       2006-07-02          |    EUR-USD    |  1.1973    |
|       2006-08-02          |    EUR-USD    |  1.1948    |
+---------------------------+---- ----------+------------+

在这里,我向您展示了 2006 年最多 8 天和 2006 年的少数货币数据,但我有截至 2013 年 30 天数据的 18 种货币的庞大数据。

我的查询是我想要一个包含特定货币每月平均汇率的数组。例如,EUR-USD 在我的示例中,January 月份的平均值是 1.19935JPY-USD0.01275GBP-USD1.559EUR-USD 月份的平均值是 February1.2030375

我想要EUR-USD 的平均值数组,或者可能是每个月的其他货币对,即。应该是这样的

`[1.19935, 1.2030375, ......]`

查询结果 = [avg. EUR-USDJanuary, 2006 ,平均值。 EUR-USDFebruary, 2006,......,平均。 EUR-USD for January, 2013, .....] 等长达 8 年。

请帮助我在单个查询中编写此内容。谢谢

【问题讨论】:

  • select avg(rate) ... group by currency_pair ,year(rate_date)*12+month(rate_date) ?
  • @ArmelLarcier 是的,我试过 SELECT avg(rate) as avg FROM historical_currencies_rate` 哪里(月 >= '2006-01-01' 和月 EUR-USD)` 但是这给了我 1 个月的平均时间。
  • 8 x 18 x 365 = 52560 !!我的朋友,我们对“巨大”的定义非常不同。这是“小”!

标签: mysql sql arrays


【解决方案1】:

获取您想要的部分日期(在您的情况下为年份和月份)并以此基础和货币对结果进行分组:

SELECT DATE_FORMAT(rate_date,'%M, %Y') AS rate_month,currency_pair,AVG(rate) AS avg_rate 
FROM historical_currencies_rate
WHERE currency_pair='EUR-USD'
GROUP BY DATE_FORMAT(rate_date,'%M, %Y'),currency_pair
ORDER BY rate_month

【讨论】:

  • 你是对的,但我需要一些像 SELECT DATE_FORMAT(rate_date,'%Y-%M') AS rate_month,currency_pair,AVG(rate) AS avg_rate FROM historical_currencies_rate where currency_pair='EUR-USD' GROUP BY DATE_FORMAT(rate_date,'%M-%Y'),currency_pair; 这样的东西,但通过 Jan2006, Feb2006, ...., Jan2013 订购。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多