【问题标题】:How to sort the answer based on the timestamp after flatten the matrix in google sheet?如何在谷歌表格中展平矩阵后根据时间戳对答案进行排序?
【发布时间】:2021-11-13 23:26:27
【问题描述】:

大家好,

我的目标是将C4:E7中的Answers扁平化为一列,然后根据Submission Timestamp的升序对其进行排序,然后将其再次从Answer1排序到Answer3

比如上面的截图,Student B在下午2:49:27提交答案,是4个学生中最早的,所以他的答案应该在列的顶部,从Answer 1开始到@ 987654328@ 然后只跟随Student AStudent D 的答案。

我现在使用=QUERY(FLATTEN(C4:E7),"Select * where Col1 is not null")。在这种情况下,我不确定如何首先根据时间戳对其进行排序。

第一列是预期的输出。

希望在这个问题上得到一些帮助,任何帮助将不胜感激!

【问题讨论】:

    标签: sorting google-sheets formula flatten


    【解决方案1】:

    试试:

    =arrayformula(query(iferror(split(flatten(if(A4:A<>"",B4:B&char(9999)&C4:E,)),char(9999)),),"select Col2 where Col2 !='' order by Col1,Col2",0))
    

    注意事项:

    起点是:

    =arrayformula(if(A4:A<>"",B4:B&char(9999)&C4:E,))
    

    这将重复您的“提交时间”列,其中 3 个答案列中的每一个都由一个不太可能在您的数据集中使用的字符分隔 char(9999) (✏)。

    然后flatten() 将它们放在 1 列中:

    split() 然后用于 ✏ 以将结果分成 2 列,但您需要iferror() 来阻止公式问题在表格中处理。

    然后query() 环绕结果以选择 col2(其中不为空),并按 Col1,Col2 排序。

    filter() 的替代品,因此您不需要iferror()

    =arrayformula(query(split(flatten(filter(B4:B&char(9999)&C4:E,B4:B<>"")),char(9999)),"select Col2 where Col2 !='' order by Col1,Col2",0))
    

    【讨论】:

    • 嗨 Aresvik,感谢您的解决方案!它非常适合我。你能解释一下split(flatten(if(A4:A&lt;&gt;"",B4:B&amp;char(9999)&amp;C4:E,)),char(9999))吗?因为我试图提取这个公式并粘贴到另一个单元格以理解公式,但它本身并不能单独工作
    • 解决方案中添加的注释。
    • 谢谢你的详细解释,我现在清楚了:)
    • 乐于助人。您也可以申请filter() 而不是需要iferror()=arrayformula(query(split(flatten(filter(B4:B&amp;char(9999)&amp;C4:E,B4:B&lt;&gt;"")),char(9999)),"select Col2 where Col2 !='' order by Col1,Col2",0))
    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2012-07-15
    • 2018-08-09
    • 2020-11-04
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多