PrestoSQL/Trino - 如何在子查询中没有显式 where 子句的情况下查询所有情况

问题描述 投票:0回答:1

我正在尝试在 Athena 中编写一个查询,其中我获得了 unique_usage_ids 列表,其中 unique_usage_start_date 至少早于contract_sign_date 1 个月

我知道如何编写查询来查找我正在寻找的某个特定实例:

SELECT customer_id, unique_usage_id
FROM customer_data
WHERE customer_id = '12345'
AND unique_usage_start_date < (SELECT contract_sign_date - interval '1' month 
                                FROM contract_data WHERE customer_id = '12345)

运行上述查询,我得到了 customer_id '12345' 所需的结果:

客户 ID 唯一_用法_id
12345 ABGSHDVBAHJD
12345 NNSJABDGIAGIQ
12345 PQSAUIDHUIADH

如何扩展此查询以获取 customer_id 和 unique_usage_id 的所有情况,其中 unique_usage_start_date 至少早于contract_sign_date 1 个月

如果我删除子句 customer_id where 子句:

SELECT customer_id, unique_usage_id
FROM customer_data
WHERE unique_usage_start_date < (SELECT contract_sign_date - interval '1' month 
                                FROM contract_data)

查询将不会运行。我收到错误:SUBQUERY_MULTIPLE_ROWS:标量子查询已返回多行。

每个 customer_id 都有自己独特的contract_sign_date 和 unique_usage_start_date。我试图找到满足子查询中条件的所有 customer_ids 和 unique_usage_ids 的列表。当我插入单个 customer_id 时,我得到了想要的结果,但我想获取整个数据库的完整列表。

sql amazon-athena presto trino
1个回答
0
投票

先进行连接,然后进行过滤,而不使用子查询。

类似:

SELECT cusd.customer_id,
    cusd.unique_usage_id
FROM customer_data cusd
    JOIN contract_data cond on cond.customer_id = cusd.customer_id
WHERE cusd.unique_usage_start_date < (cond.contract_sign_date - interval '1' month)
© www.soinside.com 2019 - 2024. All rights reserved.