通过查询仅检索唯一值

retrieve only unique values via query

这是我目前使用的公式:

=query(IMPORTRANGE("XXXX","XXXXX!A:H"), 
"select Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8 
 where Col1> date '"&TEXT(F1,"yyyy-mm-dd")&"' and Col3 = '"&B1&"' and Col4 = '"&D1&"'
 order by Col1 desc",1)

公式有效。 Col1 包括输入日期。我只检索 F1 中列出的日期之后的值。 Col3 和 Col3 包括一些在单元格 B1 和 D1 中选择的属性。 Col5 包括字符串(客户端名称)。客户端名称可以在多行中重复。 我只想检索最近的一个。有什么想法吗?

而且,为了给问题增添更多乐趣,为每个客户检索最旧的行是否是相同的想法?


这里有一个 link to demo sheet,详细信息在“唯一查询”选项卡中。

另一个挑战可能是为每个客户检索 X 行,而不仅仅是最近的行。

解决方案

我基于可以实现此结果的 SQL 表达式,但不幸的是 Google Sheets QUERY 语言的表达能力不强。这就是生成的公式看起来有点混乱的原因。

=query(
IMPORTRANGE("https://docs.google.com/spreadsheets/d/1LoHg53hzQvYtOLTcDwxLY8OrKVN4F7usX8YI41BtdWg/edit","Activity list!A:E"), 
"select Col1, Col2, Col3, Col4, Col5 
where Col1= date'"&
JOIN("' or Col1 = date  '",
  ARRAYFORMULA(TEXT(ARRAY_CONSTRAIN(
    query(query(
         "THE IMPORTED RANGE", 
         "select Col1,Col2,Col3,Col4,Col5 
          where Col1> date '"&TEXT(I2,"yyyy-mm-dd")&"' and Col2 = '"&I3&"'  
          order by Col1 desc",1), 
    "select MAX(Col1), Col4 
     group by Col4 
     order by MAX(Col1) desc 
     label MAX(Col1) ''", 0),
  1000, 1),
  "yyyy-MM-DD")
))&"'",1)

查询规范从内层开始:

  • 根据您的条件过滤数据。
  • 获取按客户分组的最新提交。
  • 将结果与整个数据集相结合以获取其他列值。
    • 使用 ARRAY_CONSTRAIN 公式检索包含日期的列。

同样的方法适用于最旧的提交,将 MAX 更改为 MIN 聚合函数。

注意:这不适合每日多次提交。

我认为最简单的方法是在 query() 中使用 Vlookup。不幸的是,它涉及使用 IMPORTRANGE() 两次,但我仍然认为它比其他一些可能的方法更有效。您可以在示例 sheet.

的 MK.Help 选项卡的 A2 中找到它
=ARRAYFORMULA(IFERROR(VLOOKUP(UNIQUE(query(IMPORTRANGE("1LoHg53hzQvYtOLTcDwxLY8OrKVN4F7usX8YI41BtdWg","Activity list!A:E"), "select Col4 where Col1> date '"&TEXT(I2,"yyyy-mm-dd")&"' and Col2 = '"&I3&"' 
 order by Col1 desc",1)),query(IMPORTRANGE("1LoHg53hzQvYtOLTcDwxLY8OrKVN4F7usX8YI41BtdWg","Activity list!A:E"), "select Col4,Col1,Col2,Col3,Col5 where Col1> date '"&TEXT(I2,"yyyy-mm-dd")&"' and Col2 = '"&I3&"' 
 order by Col1 desc",1),{2,3,4,1,5},0)))

尝试:

=SORTN(QUERY(IMPORTRANGE("1LoHg53hzQvYtOLTcDwxLY8OrKVN4F7usX8YI41BtdWg", "Activity list!A:E"), 
 "where Col1 > date '"&TEXT(I2, "yyyy-mm-dd")&"' 
    and Col2 = '"&I3&"' 
  order by Col1 desc", 1), 99^99, 2, 4, 1)

SORTN explained:

99^99    all rows - no limits
2        means "merge mode"
4        collapse 4th column into unique values
1        return 4th column ascending - 0 for descending