sql - 如何获取 SQL case 语句中两个日期中的最新日期?

标签 sql hadoop presto

我有一个 SQL 表,需要检查两个日期中的最新日期,创建一个新列。可能有也可能没有这两个值,在这种情况下它默认为一个。

我有一个这样的生产案例:

+----------+----------+-----------+
|  device  | activity |   date    |
+----------+----------+-----------+
| device 1 | stage    | 3/20/2018 |
| device 1 | test     | 3/30/2018 |
| device 2 | stage    | 6/1/2018  |
| device 2 | test     | [null]    |
+----------+----------+-----------+

我需要得到这个:

+----------+-----------------+
|  device  | stage_test_date |
+----------+-----------------+
| device 1 | 3/30/2018       |
| device 2 | 6/1/2018        |
+----------+-----------------+

我正在尝试这样:

case 
    when activity in ('stage', 'test') 
    then (select max(date))
    else null
    end as stage_test_date,

但我收到“不支持给定的相关子查询”错误。这是 PrestoDB,它使用 ANSI SQL。它适用于“然后(选择日期)”,但这并没有给我两个日期中最大的一个。

非常感谢您的建议!

最佳答案

为什么不这样做呢?

select device, max(date)
from t
group by device;

如果你想限制事件,或者添加一个where:

select device, max(date)
from t
where activity in ('stage', 'test') 
group by device;

关于sql - 如何获取 SQL case 语句中两个日期中的最新日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51616729/

相关文章:

hadoop - Bigdata Hadoop/Hbase/Bigtable项目创意

sql - Go 相当于 GCD 串行调度队列

php - 安全地减少用户余额列。我应该使用乐观锁定吗?

mysql - SQL - 你能选择特定字符串以几个字符结尾的所有内容吗?

sql - 对行进行分组,使每组的列总和不超过 10

Hadoop 命令,hadoop fs -ls 抛出重试连接到服务器错误?

presto - 如何在 presto 中查找\t\n\u 和单引号 (") 等特殊字符

sql - 给定同类操作的历史记录,如何计算在单独的表中提供的特定时间点之前/之后的操作数量?

hadoop - hive-cli 和 presto-cli 中同一张表的时间戳不同

sql - 试图找到 SQL Server 安全性 : logins, 角色等的好图片/图表