通过查询仅检索唯一值

时间:2020-07-21 20:30:20

标签: sorting google-sheets array-formulas google-sheets-query gs-vlookup

这是我目前使用的公式:

=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个行,而不仅仅是最近的行。

3 个答案:

答案 0 :(得分:2)

尝试:

IMemberResolver

enter image description here

=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)

答案 1 :(得分:1)

解决方案

我将基于一个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汇总函数的方法相同。

注意:这不适用于每天多次提交。

答案 2 :(得分:1)

我认为最简单的方法是在query()中使用Vlookup。不幸的是,它涉及到两次使用IMPORTRANGE(),但是我仍然认为它比其他一些可能的方法更有效。您可以在MK.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)))