Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 通过查询仅检索唯一值_Sorting_Google Sheets_Array Formulas_Google Sheets Query_Gs Vlookup - Fatal编程技术网

Sorting 通过查询仅检索唯一值

Sorting 通过查询仅检索唯一值,sorting,google-sheets,array-formulas,google-sheets-query,gs-vlookup,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 Col

以下是我目前使用的公式:

=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包括字符串客户端名称。客户端名称可以在多行上重复。 我只想检索最近的一个。有什么办法吗

而且,为了给问题增加更多的乐趣,每个客户端检索最早的行是否也是同样的想法

这是一个,在“唯一查询”选项卡中的详细信息

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

解决方案 我基于一个SQL表达式来实现这一结果,但不幸的是,Google Sheets查询语言并没有那个么有表现力。这就是为什么得出的公式看起来有点混乱

=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_constraint公式检索带有日期的列。 同样的方法也适用于最旧的提交更改MAX for MIN聚合函数

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

解决方案 我基于一个SQL表达式来实现这一结果,但不幸的是,Google Sheets查询语言并没有那个么有表现力。这就是为什么得出的公式看起来有点混乱

=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_constraint公式检索带有日期的列。 同样的方法也适用于最旧的提交更改MAX for MIN聚合函数


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

我认为最简单的方法是在查询中使用Vlookup。不幸的是,它需要使用IMPORTRANGE两次,但我仍然认为它比其他一些可能的方法更有效。您可以在样本表的“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)))

我认为最简单的方法是在查询中使用Vlookup。不幸的是,它需要使用IMPORTRANGE两次,但我仍然认为它比其他一些可能的方法更有效。您可以在样本表的“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)))
尝试:

尝试:



此公式当前居住在哪个单元格中?共享您的sheet@MattKing-我用演示表编辑了我的问题。Thanks@player0-我用演示表编辑了我的问题。谢谢这个公式目前居住在哪个单元格?请共享您的sheet@MattKing-我用演示表编辑了我的问题。Thanks@player0-我用演示表编辑了我的问题。谢谢,谢谢!这太棒了。有几个问题:1。在公式的末尾,{2,3,4,1,5},0,这与什么有关?2.你能解释一下双重输入背后的逻辑吗?因为它们看起来是一样的?谢谢@user13708028{2,3,4,1,5}是第2、3、4、。。。0是完全匹配的。他们不一样。。。有VLOOKUP,所以第一个导入输出唯一值1列,第二个导入返回RESTThank!这太棒了。有几个问题:1。在公式的末尾,{2,3,4,1,5},0,这与什么有关?2.你能解释一下双重输入背后的逻辑吗?因为它们看起来是一样的?谢谢@user13708028{2,3,4,1,5}是第2、3、4、。。。0是完全匹配的。他们不一样。。。存在VLOOKUP,因此第一个导入输出唯一值1列,第二个导入返回REST。SORTN,我以前从未使用过,似乎非常适合这种情况。它在演示表中工作得很好,但是当我试图用我们的实时数据复制它时,它返回了错误的数据。原始范围是一个活动日志,它可以在任何给定的一天具有与客户机相关的多个输入。我们的重要目标是只提取与每个客户机相关的最近N行。我尝试根据您的解释和Sheets文档调整SORTN参数,但无法按照我们的要求检索数据。再次感谢!谢谢你编辑你的答案。我可能误解了什么。SORTN是否查找重复的行?我们的行不同,如演示表中所示。的确,多行中有几列是相同的,但有些列不相同。否,SORTN只查看一个指定的列(在本例中为第4列-客户端名称),并通过删除所有非第一行来创建一组唯一值。查询中按Col1 desc排序是至关重要的,因为它将数据从最近的时间戳排序到过去,然后SORTN将只删除过去的值!!现在它似乎起作用了,但有趣的是,它确实起作用了
她将标题行从原始范围更改为导入范围区域中的随机行。@player0按名称排序,但消除联系是个好主意。谢谢。SORTN,我以前从未使用过,似乎非常适合这种情况。它在演示表中工作得很好,但是当我试图用我们的实时数据复制它时,它返回了错误的数据。原始范围是一个活动日志,它可以在任何给定的一天具有与客户机相关的多个输入。我们的重要目标是只提取与每个客户机相关的最近N行。我尝试根据您的解释和Sheets文档调整SORTN参数,但无法按照我们的要求检索数据。再次感谢!谢谢你编辑你的答案。我可能误解了什么。SORTN是否查找重复的行?我们的行不同,如演示表中所示。的确,多行中有几列是相同的,但有些列不相同。否,SORTN只查看一个指定的列(在本例中为第4列-客户端名称),并通过删除所有非第一行来创建一组唯一值。查询中按Col1 desc排序是至关重要的,因为它将数据从最近的时间戳排序到过去,然后SORTN将只删除过去的值!!现在它似乎起作用了,但有趣的是,它将标题行从原始范围推到了导入范围区域中的随机行。@player0按名称排序,但消除联系是个好主意。