我正在尝试使用Google表格创建学生数据库。它包含有关学生,团体和订单的信息;订单可以改变学生在小组中的成员资格(在一个小组中进行,升级到一个新的小组,毕业,休假,发送)。 Here是示例数据库表,here是我的数据库结构的详细说明(表 report_Groups 略有变化,其先前的变体,在链接上描述,现在已命名 old_report_Groups )。
我需要一个查询,在给定日期选择给定组的当前成员列表。这意味着我必须为每个学生选择 名称,给定日期之前的后一状态和相应的组。从这个结果中选择学生姓名,其中状态为“Taken in”或“Moved Up”,组与给定状态相同。
问题是选择后一种状态。它应该是MAX(状态),其“自”日期≤给定日期,但是存在一个众所周知的问题,即与聚合函数一起选择多个字段。 Here是一个非常接近的问题,但是从“最佳”答案中查询会给出错误“QUERY:NO_COLUMN”。我甚至从那里复制了表单 Raw 并尝试执行建议的查询(使用最大的修改 - 根据我的语言环境限制用分号替换逗号)对报告的数据进行处理 - 同样错误(在我的数据库中检查原始和 report_Raw 表)。其他变体(通过MMULT和TRANSPOSE)可以工作,但它的性能非常差。
你能给我什么建议?提前谢谢。
更新:我发现问题的解决方案(在我的回答中有描述)。 要解决这个问题,我需要知道different question的答案。
答案 0 :(得分:0)
这是解决方案(问题如下所述)。
一个。过滤 Orders_Students 以选择行,其中“自”单元格值<给定日期( report_Groups !A2):
=QUERY(Orders_Students!B:E;"select E, B, C, D where E <= date '" & TEXT(report_Groups!A2;"yyyy-MM-dd") & "'";1)
此中间结果存储在 inner_report_Groups 标签中(在下一个查询中将多次引用)。
B中。过滤 inner_report_Groups 以选择MAX(“since”)值和每个学生的相应行单元格值 :
ARRAYFORMULA(VLOOKUP(QUERY({ROW(inner_report_Groups!A$2:A)\SORT(inner_report_Groups!A$2:D)};"select max(Col1) group by Col3 label max(Col1)''";0);{ROW(inner_report_Groups!A$2:A)\SORT(inner_report_Groups!A$2:D)};{3\4\5};0)
以上公式用作 report_Groups !D2中的 内部 查询(同样在D3,D4中 - 具有相应的权限)。
℃。第二个查询结果将被过滤,以获取状态为“接收”或“上移”的学生,相应的组等于给定组( report_Groups !B2(同样在B3,B4-适当的权限)):
=TRANSPOSE(IFERROR(QUERY(<here is the formula from step B>);"select Col1 where Col3 = '" & B2 & "' and (Col2='Taken in' or Col2='Moved Up')";0)))
以上公式用作 report_Groups !D2中的 外部 查询(同样在D3,D4中 - 具有相应的indeces)。如果查询结果为#N / A,则IFERROR不显示任何内容。
该查询会显示所需的结果,您可以在 report_Groups 标签中看到。但是,当步骤B上的查询搜索 inner_report_Groups 的 整列 时,只有一个给定日期可以是已分析(或其他给定日期的查询中间结果应放在 inner_report_Groups 的不同列中或不同的标签中。有没有办法为临时提供别名结果是在单个单元格公式中引用它而不是将其保存在不同的选项卡上?