【问题标题】:Google Sheet Query output for difference in succesive values in a date column谷歌表格查询输出日期列中连续值的差异
【发布时间】:2020-07-05 15:03:51
【问题描述】:

我有一个谷歌表,其中包含日期(mm/dd/yyyy)的列。我想计算日期列中两个连续值(输入表)之间的差异,并在差异大于 1 时将输出返回到单独的表(摘要表)。尝试使用谷歌表查询,因为它有执行查询结果并根据检索自动添加行的属性。第一张表(输入)主要是一个数据输入表,其中输入日期作为进程进行的时间。因此,每当两个连续的日期条目相差超过 1 时,我想报告 start_date(即第 i 行中的日期值)和 end_date(即第 i+1 行中的日期值)。对于每个第 i 行和第 i+1 行,将成为摘要表中针对列 start_date(ith value) 和 end_date(i+1th value) 的新行。有什么方法可以实现这一点吗?

更新了一些参考数据:

https://docs.google.com/spreadsheets/d/1-PAwtw07LxH8OYJ9wvPdivcoLHjz1IRHBrqOieqixY8/edit?usp=sharing

【问题讨论】:

  • 分享您的工作表副本以及所需结果的示例
  • 我已经用示例表更新了问题。
  • 这里的要点是,当数据输入表中有符合日期差异标准的新条目时,汇总表会自动添加新行。拖动汇总表来计算数据输入表中较新行的结果可能不是最好的选择。这就是为什么使用谷歌查询将是一个更好的选择。

标签: google-sheets google-sheets-formula google-sheets-query


【解决方案1】:

我认为像这样在查询之外进行减法(因为查询不允许对日期进行算术)更容易:

=ArrayFormula(query({{A2:A},{A3:A;""},{A3:A;""}-{A2:A}},"select Col1,Col2 where Col3>1 label Col1 'Start Date',Col2 'End Date'"))

编辑

您可能应该检查日期之间的任何空单元格,因此您可以在 Where 子句中添加另一个条件:

=ArrayFormula(query({{A2:A},{A3:A;""},{A3:A;""}-{A2:A}},"select Col1,Col2 where Col3>1 and Col1 is not null label Col1 'Start Date',Col2 'End Date'"))

【讨论】:

  • 谢谢。我会尝试确认。对复杂的谷歌工作表计算没有太多想法。这就是为什么在这里寻求帮助。
  • 抱歉来晚了,成功了,谢谢。但是,你能解释一下公式吗?一个更具体的问题是,{} 是否定义了数据集查询应执行,以及它的含义是什么?在花括号里?另外为什么我们需要将它包装在 ArrayFormula() 函数中? @汤姆
  • 我相信 Tom 的公式为查询提供了 3 列 - Col1 是 A 列中的所有日期,Col2 是 B 列中除第一个以外的所有日期(最后一个添加了空白单元格行,使列长度相同)和 Col3 是 Col1 和 Col2 中的日期之间的差异。当它大于 1 时,日期相隔一天以上,并且满足 WHERE 标准。这 ”;”元素是添加两个彼此上方的范围,即。在同一列。因此 {A3:A;" "} 在范围 A3:A 下方添加一个空格(或单元格),以使范围与范围 A2:A 的长度相同。
  • @Arunavo,我相信 ARRAYFORMULA 是启用减法运算{A3:A;""}-{A2:A} 所必需的,它正在计算 Col3 的值。否则,数组减去数组会导致错误。如果我错了,有人会纠正我。
  • 是的——@kirkg 是绝对正确的。也许唯一要添加的是我必须使用内部大括号来获取添加单元格 {A3:A;""} 的范围以正确解析。如果日期之间有任何可能的空行,你会得到一个虚假的输出,所以我会在我的答案中添加一个检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2019-04-15
相关资源
最近更新 更多