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时,我们选择了它。如果它不是真的,那么我们看看日期。