2

A1包含 Sheet1 的A的唯一转置数据

=TRANSPOSE(UNIQUE(QUERY(Sheet1!$A:$A;"select A";1)))

A2包含以下代码:

=QUERY(Sheet1!$A:$B;"select B where A like '%"&A1&"%'";0)

Sheet1具有带有标签名称的 col A和带有标签高度的col B

名称的数据量不同,这就是为什么我只想列出最新数据的原因。所以: 如何减少A2的查询以仅显示最后 3 个内容而不对数据进行排序?(更新的问题)

更新:以下策略可以成为解决方案,但希望有更干净的方法:总是在Sheet1的内容上方添加新数据,然后添加limit 3到查询中。

这是沙箱:https ://docs.google.com/spreadsheet/ccc?key=0As_Zg0RxlMgXdFR2M3RpT05MX01tSlRKR0RrTXlFb0E&usp=sharing

4

1 回答 1

2

eaposztrof, Chopie, kurczę

QUERY+LIMIT只有在最近的行是第一行时才会起作用。

但是,如果最近的行位于底部 -QUERY如果使用得当,解决方案将起到作用OFFSET。然而,要OFFSET在没有任何序列/日期标识符的数据上使用,您需要计算内容行并假设最后的内容是最新的。这会强制使用FILTER- 另一个查询之类的东西。

考虑将时间戳添加到原始数据表并使用简单的单个 FILTER / SORT 公式。现在,这将根据需要显示您的数据:

QUERY(Sheet1!$A:$B;"select B where A like '%"&A1&"%' offset "&(COUNT(FILTER(Sheet1!$B2:$B;Sheet1!$A2:$A=A1))-3);0)

诀窍是使用offsetGoogle Query Language ( https://developers.google.com/chart/interactive/docs/querylanguage#Offset ) 中的子句,它绕过前 X 行。我们可以通过计算偏移量来获得最后 3 行。由于您没有时间戳或 ID,因此假设底行是最新的,并且您想忽略起始行:

  1. 计算符合条件的行COUNT(FILTER(Sheet1!$B2:$B;Sheet1!$A2:$A=A1))(我不喜欢 QUERY 中的这个 FILTER - 效率不高)

  2. 减去“3”以获得偏移量(这就是为什么-3COUNT.

最有效的解决方案是编写具有=myfunction类似用途的函数的自己的脚本(不幸的是,允许具有 .setValues 的脚本需要将此函数添加到某个事件或上部菜单栏,但这是单独的故事)。

于 2013-09-27T09:51:21.260 回答