获取包含 google sheet 中最后一次出现的值的整行
Get whole line containing last occurrence of value in google sheet
我有一个很长的 table(50k 行和 15 列),其中不同的用户使用 google 形式报告状态(table 总是按时间顺序排序),并且我想获得每个用户的最后报告。我设法做到了,但重新加载时间太长,我知道我使用的公式对于电子表格来说太重了,但我找不到更好的方法。
为了简化场景,案例可以应用于以下输入和期望的输出:
输入:
| 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 |
我设法将枢轴 table 与 user 作为行和 max(Timestamp) 作为值,然后将该信息提供给公式(也许 INDEX 和 MATCH 会是更好的方法):
OFFSET('Sheet1'!$A,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 可能会提高性能,但我无法实现。
假设 A 列中的时间戳、B 列中的用户和 C 列中的状态尝试
=Arrayformula(iferror(vlookup(unique (B2:B), sort({B2:B, A2:C}, 2, 0), {2, 3, 4}, 0)))
我有一个很长的 table(50k 行和 15 列),其中不同的用户使用 google 形式报告状态(table 总是按时间顺序排序),并且我想获得每个用户的最后报告。我设法做到了,但重新加载时间太长,我知道我使用的公式对于电子表格来说太重了,但我找不到更好的方法。
为了简化场景,案例可以应用于以下输入和期望的输出:
输入:
| 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 |
我设法将枢轴 table 与 user 作为行和 max(Timestamp) 作为值,然后将该信息提供给公式(也许 INDEX 和 MATCH 会是更好的方法):
OFFSET('Sheet1'!$A,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 可能会提高性能,但我无法实现。
假设 A 列中的时间戳、B 列中的用户和 C 列中的状态尝试
=Arrayformula(iferror(vlookup(unique (B2:B), sort({B2:B, A2:C}, 2, 0), {2, 3, 4}, 0)))