数据列为整数时如何使用与日期相关的函数

时间:2016-11-07 04:13:59

标签: google-sheets google-query-language

这是从雅虎财经中提取股息信息的功能。

=importdata("http://real-chart.finance.yahoo.com/table.csv?s=T&a=1&b=1&c=2010&d="&
month(today())&"&e="&DAY(today())&"&f="&year(today())&"&g=v&ignore=.csv")

这会返回......

  A       B
Date    Dividends
42648   0.48
42557   0.48
42466   0.48
42375   0.48
42284   0.47
42193   0.47
42102   0.47
42011   0.47
41920   0.46
41828   0.46
41737   0.46
41647   0.46
41555   0.45
41463   0.45
41372   0.45
41282   0.45
41187   0.44
41096   0.44
41004   0.44
40914   0.44
40821   0.43
40730   0.43
40639   0.43
40549   0.43
40457   0.42
40366   0.42
40275   0.42

我想要做的是按每笔交易的年份进行分组。我找到了解决方法来实现这一目标。

=QUERY( A:B, 
"Select year(A) , sum(B) Where A is not null Group by year(A) Label year(A) 'Year',  
sum(B) 'Total'" , 1)

*结果

Year    Total
2010    70.530003
2011    85.077798
2012    85.877801
2013    99.133401
2014    90.649999
2015    87.259999
2016    104.349998

虽然如果我手动将A列的单元格格式更改为日期格式,这种方法很有效,但我希望将其组合成一个函数。更像是这样的事情。

=query(importdata("http://real-chart.finance.yahoo.com/table.csv?s=T&a=00&b=3&c=2000&d="&
month(today())&"&e="&DAY(today())&"&f="&year(today())&"&g=v&ignore=.csv"),
"Select year(Col1) , sum(Col2) Where Col1 is not null Group by year(Col1) 
Label year(Col1) 'Year',  sum(Col2) 'Total'")

此函数给出了一条错误消息

  

无法在不是Date或a的列上执行功能年份   DateTime列

我想这是因为Col1是整数,而不是日期格式。

使这项工作的任何解决方法?

1 个答案:

答案 0 :(得分:1)

简短回答

使用TO_DATE内置函数将列数值转换为日期。

=ArrayFormula(query({TO_DATE(A:A),B:B},
"Select year(Col1) , sum(Col2) Where Col1 is not null Group by year(Col1) Label year(Col1) 
'Year',  sum(Col2) 'Total'" , 1))

解释

简化案例

  • 以下公式假定导入的数据位于单元格A2:B28上。
  • TO_DATE应用于A列值,然后构建一个数组作为QUERY的第一个参数。
=ArrayFormula(query({TO_DATE(A2:A28),B2:B28},"select year(Col1)"))

单一公式

虽然这是可能的,但这需要一个非常复杂的(难以阅读和难以维护,具有重复的嵌套函数),因此脚本很可能是比单个公式更好的替代方案。