获取整行,其中包含Google工作表中最后一次出现的值

时间:2019-01-03 14:41:21

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

我有一个长表(5万行和15列),其中不同的用户使用Google表单报告状态(该表始终按时间顺序排序),我想获取每个用户的最新报告。我已经做到了,但是重新加载的时间太长了,我知道我使用的公式对于电子表格来说太重了,但是我找不到更好的方法。

为简化风景,可以将案例应用于以下输入和所需的输出:

输入:

|      Timestamp      | User |  Status  |
|:-------------------:|:----:|:--------:|
| 2019-01-03 10:00:30 |   A  | Started  |
| 2019-01-03 10:01:41 |   B  | Started  |
| 2019-01-03 10:02:00 |   B  | Finished |
| 2019-01-03 10:02:14 |   C  | Started  |
| 2019-01-03 10:03:22 |   A  | Failed   |
| 2019-01-03 10:00:04 |   C  | Finished |

输出:

|      Timestamp      | User |  Status  |
|:-------------------:|:----:|:--------:|
| 2019-01-03 10:02:00 |   B  | Finished |
| 2019-01-03 10:03:22 |   A  | Failed   |
| 2019-01-03 10:00:04 |   C  | Finished |

我设法将数据透视表与 user 作为行,将 max(Timestamp) 作为值,然后将该信息提供给公式(也许用INDEX和MATCH会是更好的方法):

OFFSET('Sheet1'!$A$1,ArrayFormula(max(if('Sheet1'!$B:$B=$A3, Row('Sheet1'!$B:$B))))-1,column()-1)

对于每种独特的结果,我还尝试了以下方法。

|      Unique users      |                                     Query                                     |
|:----------------------:|:-----------------------------------------------------------------------------:|
| =UNIQUE('Sheet1'!$A:$A) | =QUERY('Sheet1'!$A:$C, "SELECT A, C WHERE B='"&B2&"' ORDER BY A DESC LIMIT 1",0) |

根据我的阅读,结合使用ARRAYFORMULA和QUERY可能会提高性能,但是我还无法实现。

1 个答案:

答案 0 :(得分:1)

假设列A中的时间戳记,列B中的用户和列C中的状态,请尝试

=Arrayformula(iferror(vlookup(unique (B2:B), sort({B2:B, A2:C}, 2, 0), {2, 3, 4}, 0)))