在Google查询中选择最新日期的平均数

时间:2018-01-10 11:09:19

标签: mysql sql google-api google-docs-api google-query-language

我需要计算每个农业最新日期的平均价格。我使用此Google查询从Google表格加载表格。

var queryString = encodeURIComponent("select max(A), D, avg(E) where B = 'cpt-novo' group by D");

但是我的结果不正确。此外,如果我更改了任何内容,我经常会收到错误,例如" ADD_COL_TO_GROUP_BY_OR_AGG" " CANNOT_GROUP_WITHOUT_AGG"

这是表格:

date,       basis,    trader,   culture,       price
10.10.2017, cpt-novo, one,      wheat-5-class, 8000
31.10.2017, cpt-novo, one,      wheat-5-class, 8500
17.10.2017, cpt-novo, one,      wheat-11.5,    9100
31.10.2017, cpt-novo, one,      wheat-11.5,    9200
17.10.2017, cpt-novo, one,      wheat-12,      9300
31.10.2017, cpt-novo, one,      wheat-12,      9400
17.10.2017, cpt-novo, one,      wheat-12.5,    9500
31.10.2017, cpt-novo, one,      wheat-12.5,    9600
17.10.2017, cpt-novo, one,      wheat-13,      9750
31.10.2017, cpt-novo, one,      wheat-13,      9850
17.10.2017, cpt-novo, one,      wheat-13.5,    10000
31.10.2017, cpt-novo, one,      wheat-13.5,    10100
27.07.2017, cpt-novo, two,      barley,        8600
05.08.2017, cpt-novo, two,      barley,        9000
02.09.2017, cpt-novo, two,      wheat-11.5,    8300
10.10.2017, cpt-novo, two,      wheat-11.5,    9000
10.10.2017, cpt-novo, two,      wheat-12,      9300
01.12.2017, cpt-novo, two,      wheat-12,      9200
10.10.2017, cpt-novo, two,      wheat-12.5,    9600
01.12.2017, cpt-novo, two,      wheat-12.5,    9500
10.10.2017, cpt-novo, two,      wheat-13,      9800
01.12.2017, cpt-novo, two,      wheat-13,      9700
10.10.2017, cpt-novo, two,      wheat-13.5,    10000
10.10.2017, cpt-novo, two,      wheat-13.5,    10100
06.12.2017, cpt-novo, three,    wheat-13,      9800
06.12.2017, cpt-novo, three,    wheat-12,      9400
06.12.2017, cpt-novo, three,    wheat-11.5,    9200

结果应该是这些(我自己计算):

wheat-5-class,  8500
wheat-11.5,     9133,333333
wheat-12,       9333,333333
wheat-12.5,     9550
wheat-13,       9783,333333
wheat-13.5,     10100
barley,         9000

1 个答案:

答案 0 :(得分:0)

这个答案适用于MySQL:

第一步:计算每种文化的MAX(日期)......

    SELECT culture, MAX(date) max_date FROM my_table GROUP BY culture;
    +---------------+------------+
    | culture       | max_date   |
    +---------------+------------+
    | barley        | 2017-08-05 |
    | wheat-11.5    | 2017-10-31 |
    | wheat-12      | 2017-12-01 |
    | wheat-12.5    | 2017-12-01 |
    | wheat-13      | 2017-12-01 |
    | wheat-13.5    | 2017-10-31 |
    | wheat-5-class | 2017-10-31 |
    +---------------+------------+

第二步:查找满足上述条件的所有行......

SELECT a.* 
  FROM my_table a 
  JOIN
     ( SELECT culture
            , MAX(date) max_date 
         FROM my_table 
        GROUP 
           BY culture
     ) b
    ON b.culture = a.culture
   AND b.max_date = a.date;
+------------+----------+--------+---------------+-------+
| Date       | basis    | trader | culture       | price |
+------------+----------+--------+---------------+-------+
| 2017-08-05 | cpt-novo | two    | barley        |  9000 |
| 2017-10-31 | cpt-novo | one    | wheat-11.5    |  9200 |
| 2017-12-01 | cpt-novo | two    | wheat-12      |  9200 |
| 2017-12-01 | cpt-novo | two    | wheat-12.5    |  9500 |
| 2017-12-01 | cpt-novo | two    | wheat-13      |  9700 |
| 2017-10-31 | cpt-novo | one    | wheat-13.5    | 10100 |
| 2017-10-31 | cpt-novo | one    | wheat-5-class |  8500 |
+------------+----------+--------+---------------+-------+

第三步:找出上述的平均价格(按文化)。

留给读者练习。

编辑:我对gql一无所知。我怀疑你可以写下面的内容,但我不知道它是否正确或有效......

for b in db.GqlQuery("SELECT culture , MAX(date) max_date GROUP BY culture"):
for a in db.GqlQuery("SELECT * WHERE culture=:1 AND date=:2", b.culture,b.max_date):
print a.price

同样,如果上述情况不正确,我省略了第3步。