【问题标题】:QUERY formula to return only the latest record per email based on timestampQUERY 公式根据时间戳仅返回每封电子邮件的最新记录
【发布时间】:2020-05-19 15:50:25
【问题描述】:

拥有这个 Google Sheet QUERY 公式:

=QUERY(FORMULARIO!A4:Q, " select G,E,K,M,N,L,O,Q where not upper(J) = 'PAGÓ' and A > date '"&TEXTO(HOY()-3, "yyyy-mm-dd")&"' and E is not null and O is not null and Q contains '@' and not Q matches '"&TEXTJOIN("|", 1, QUERY(FORMULARIO!J4:Q, "select Q where upper(J) = 'PAGÓ' ", 0))&"'", 0)

如何仅返回每封电子邮件(Q 列)的一条记录,即 A 列中查看日期的最新记录?

测试表:

https://docs.google.com/spreadsheets/d/1jBMo42cbylrNHcf9b9QLI4oDw0H0oomCGrEAuPsBlA8/edit#gid=1465616509

在“结果”选项卡下是工作查询,我只需要根据新近过滤掉重复项,只留下最近的一个,唯一标识符是电子邮件

【问题讨论】:

    标签: datetime google-sheets google-sheets-formula google-forms google-sheets-query


    【解决方案1】:

    编辑

    (按照 OP 的共享演示表)

    要使用的公式是:

    =SORT(SORTN(QUERY(FORMULARIO!A4:Q, " select G,E,K,M,N,L,O,Q where not upper(J) = 'PAGÓ' and A > datetime '"&TEXTO(AHORA()-3, "yyyy-mm-dd HH:mm:ss")&"' and E is not null and O is not null and Q contains '@' and not Q matches '"&TEXTJOIN("|", 1, QUERY(FORMULARIO!J4:Q, "select Q where upper(J) = 'PAGÓ' ", 0))&"'", 1),9^9,2,2,1),1,1)
    

    发生了什么变化:

    • 我们使用SORTN 函数封装了您的原始查询,以查找和排除列Q 中的所有重复电子邮件,但基于A 列中时间戳的最新电子邮件除外。
    • 我们用SORT 函数对结果进行了一次包装,以使我们的最终结果按时间戳排序。

    专业提示
    在主查询中还进行了额外更改,将
    and A > date '"&TEXT(HOY()-3, "yyyy-mm-dd")&"'
    改为
    and A > datetime '"&TEXT(AHORA()-3, "yyyy-mm-dd HH:mm:ss")&"'
    所以我们将 TODAY 更改为 NOW

    通过这样做,我们使用时间戳中的日期和时间来计算日期,而不仅仅是日期

    (仍有微小改进/更改的空间,但超出了此问题的范围。)


    原答案

    认为您的公式按预期工作是理所当然的(如果没有测试表就无法检查)但会产生多行,您可以在公式末尾使用 limit 子句。

    =QUERY(FORMULARIO!A4:Q, " select G,E,K,M,N,L,O,Q where not upper(J) = 'PAGÓ' and A > date '"&TEXTO(HOY()-3, "yyyy-mm-dd")&"' and E is not null and O is not null and Q contains '@' and not Q matches '"&TEXTJOIN("|", 1, QUERY(FORMULARIO!J4:Q, "select Q where upper(J) = 'PAGÓ' ", 0))&"' limit 1", 0)
    

    【讨论】:

    • 没有。这只会返回一个记录总数我希望每封电子邮件有一行是最近的匹配
    • 最后使用ORDER BY (respective column) Desc,就像@marikanitsos 所说的那样,limit 1 是最新的
    • 再次,这仅返回 1 行,我需要多行,但当有多个实例时,限制到一封电子邮件是最新的电子邮件
    • 请分享一张测试表
    • @marikamitsos docs.google.com/spreadsheets/d/… 在“结果”选项卡下是工作查询,我只需要根据新近过滤掉重复项,只留下最近的一个,唯一标识符是电子邮件
    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 2020-07-30
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多