不支持子查询中的presto多列

时间:2020-04-24 13:57:56

标签: sql presto

只是想弄清楚presto(以及奇怪的表结构),但假设我有一个表来存储这样的数据:

Table1

我正在寻找一个查询以获取以下内容作为输出:

required output

我尝试使用以下查询来解决这个问题:

SELECT DISTINCT

ts.id,

(SELECT
ts.trial_type,
ts.trial_score

FROM trial_scores ts

WHERE ts. = 12345678
AND ts.date = date_format(date_add('day', -3, CURRENT_DATE), '%Y-%m-%d')) as previous_score,

(SELECT
ts.trial_type,
ts.trial_score

FROM trial_scores ts

WHERE ts. = 12345678
AND ts.date = date_format(date_add('day', -2, CURRENT_DATE), '%Y-%m-%d')) as current_score

FROM trial_scores ts

但是,我一直从查询引擎中收到错误消息:“尚不支持子查询返回的多个列。找到2个”

还有其他方法可以重写此查询以在上面获得所需的输出吗?

可以确认我的两个内部子查询都是独立运行的,所以我想这是将它们与其他我无法理解的所有事物融合在一起的情况。

1 个答案:

答案 0 :(得分:1)

我怀疑您只需要条件聚合。

SELECT ts.id,
       MAX(CASE WHEN ts.date = date_format(date_add('day', -3, CURRENT_DATE), '%Y-%m-%d') THEN ts.trial_type END) as prev_trial_type,
       MAX(CASE WHEN ts.date = date_format(date_add('day', -3, CURRENT_DATE), '%Y-%m-%d') THEN ts.trial_scoree END) as prev_trial_score,
       MAX(CASE WHEN ts.date = date_format(date_add('day', -2, CURRENT_DATE), '%Y-%m-%d') THEN ts.trial_type END) as curr_trial_type,
       MAX(CASE WHEN ts.date = date_format(date_add('day', -2, CURRENT_DATE), '%Y-%m-%d') THEN ts.trial_scoree END) as curr_trial_score
FROM trial_scores ts
GROUP BY ts.id;
相关问题