Sql 如何在标准Bigquery中使用if-else语句?

Sql 如何在标准Bigquery中使用if-else语句?,sql,database,google-bigquery,Sql,Database,Google Bigquery,如果我有如下表格: |**Entry**-------**Name**--------**Date**------------------**Boolean**| | 1.-----------Car-----------2019-12-01----------True| | 2.-----------Car-----------2019-12-03----------False| | 3.-----------Bus-----------2019-12-05-------

如果我有如下表格:

|**Entry**-------**Name**--------**Date**------------------**Boolean**|    
|  1.-----------Car-----------2019-12-01----------True|  
|  2.-----------Car-----------2019-12-03----------False|  
|  3.-----------Bus-----------2019-12-05----------False|  
|  4.-----------Bus-----------2019-12-11----------False|
如果Boolean列为true,或者如果Boolean值为false,则选择具有不同名称的行,然后选择具有最早日期的行。因此,对于car条目,我想选择第一行,因为布尔值为true(因此我可以忽略所有其他条目),对于bus条目,我想选择最后一行,因为它的两个布尔值都为false,所以我想选择最早的日期(最接近当前日期)

编辑:预期输出

|1。-------汽车----2019-12-01------正确|

|4。-------总线------------2019-12-11-------False |

下面是用于BigQuery标准SQL的

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY bool DESC, dt DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY name

注;这是基于你的评论中的“只有一行有车且真实”

如果要应用于问题中的样本数据,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Car' name, '2019-12-01' dt, TRUE bool UNION ALL
  SELECT 'Car', '2019-12-03', FALSE UNION ALL
  SELECT 'Bus', '2019-12-05', FALSE UNION ALL
  SELECT 'Bus', '2019-12-11', FALSE 
)
SELECT AS VALUE ARRAY_AGG(t ORDER BY bool DESC, dt DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY name   
结果是

Row name    dt          bool     
1   Car     2019-12-01  true     
2   Bus     2019-12-11  false    

请添加更多数据,如您的当前输出和预期输出。如果Car还有另一行为TRUE-您将选择哪一行呢?查询有两部分,因此您可以分别为这两种情况编写查询并合并它们。因为使用“CASE WHEN…THEN…”作为单个查询编写对于读写器来说,每一列都比较复杂。只有一行包含car和true。这就是为什么当我们读到一行为true时,我们选择了它。如果它不是真的,那么我们看看日期。