代码之家  ›  专栏  ›  技术社区  ›  Ultiranks

谷歌表格查询-使用另一个查询过滤日期

  •  0
  • Ultiranks  · 技术社区  · 4 月前

    我在GoogleSheet中有以下数据源:

    日期 预计 平衡
    01/01/2025 错误的 $3,824.54
    01/16/2025 错误的 $2,366.39
    01/21/2025 错误的 $3,783.64
    01/22/2025 真的 $3,750.72
    01/28/2025 真的 $3,150.72
    02/03/2025 真的 $135.72
    02/04/2025 真的 $2,974.45
    02/12/2025 真的 $2,863.16
    02/18/2025 真的 $4,153.66
    02/25/2025 真的 $3,553.66
    03/03/2025 真的 $538.66
    03/04/2025 真的 $3,377.39

    使用QUERY函数,我想在每月最大日期的PROJECTED为真时获得余额。 预期结果应如下:

    月份 最大日期 平衡
    1. 01/28/2025 $3,150.72
    2. 02/25/2025 $3,553.66
    3. 03/04/2025 $3,377.39

    我最初的方法是以下公式:

    =QUERY('2025'!A2:C,
    "SELECT MONTH(Col1)+1, MAX(Col1), SUM(Col3)
    WHERE Col2=TRUE  
    GROUP BY MONTH(Col1)
    LABEL MONTH(Col1)+1 'Month', MAX(Col1) 'Max Date', Sum(Col3) 'Balance'")
    

    然后我意识到,我需要在Col1上添加另一个WHERE条件,以便在此基础上提取Col3数据。 我定义了以下查询:

    =QUERY('2025'!A2:C,
    "SELECT MAX(Col1)
    WHERE Col2=TRUE
    GROUP BY MONTH(Col1)
    LABEL MAX(Col1) '' ")
    

    结果是:

    01/28/2025
    02/25/2025
    03/04/2025

    为了在原始查询中作为值插入,我需要对文字应用格式条件,如下所示:

    =TEXT(QUERY('2025'!A2:C,
    "SELECT MAX(Col1)
    WHERE Col2=TRUE
    GROUP BY MONTH(Col1)
    LABEL MAX(Col1) '' "),
    "yyyy-MM-dd")
    

    但结果如下:

    2025-01-28

    2月和3月的另外两条线路怎么了?

    最后,最后一个查询应该看起来像这样:

    =QUERY('2025'!A2:C,
    "SELECT MONTH(Col1)+1, MAX(Col1), SUM(Col3)
    WHERE Col2=TRUE  
    AND Col1 MATCHES DATE '"&TEXT(QUERY('2025'!A2:C,"SELECT MAX(Col1) WHERE Col2=TRUE GROUP BY MONTH(Col1) LABEL MAX(Col1) '' "),"yyyy-mm-dd")&"'
    GROUP BY MONTH(Col1)
    LABEL MONTH(Col1)+1 'Month', MAX(Col1) 'Max Date', Sum(Col3) 'Balance'")
    

    但我得到了以下信息:

    月份 最大日期 平衡
    1. 01/28/2025 $3,750.72

    2月和3月的另外两条线路怎么了?

    2 回复  |  直到 4 月前
        1
  •  0
  •   z..    4 月前

    我不认为有一个简单的方法来解决这个问题,只使用 QUERY 功能。

    以下是您可以尝试的替代方案:

    =ARRAYFORMULA(LET(
       data, A2:C,
       max_dates, QUERY(data,
         "SELECT MAX(Col1)
          WHERE Col2 = TRUE
          GROUP BY MONTH(Col1)
          LABEL MAX(Col1) ''"
       ),
       VLOOKUP(max_dates, {data, MONTH(data)}, {4, 1, 3}, )
     ))
    

    此公式首先使用简单的查询找到最大日期,然后对其运行vlookup以获取相应的余额。

        2
  •  0
  •   rockinfreakshow    4 月前

    以下是一种方法 sortn :

    =let(Σ,sort(filter({month(A:A),A:A,C:C},B:B),2,),
         sortn(Σ,12,2,choosecols(Σ,1),1))
    

    enter image description here