只是想弄清楚presto(以及奇怪的表结构),但假设我有一个表来存储这样的数据:
我正在寻找一个查询以获取以下内容作为输出:
我尝试使用以下查询来解决这个问题:
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个”
还有其他方法可以重写此查询以在上面获得所需的输出吗?
可以确认我的两个内部子查询都是独立运行的,所以我想这是将它们与其他我无法理解的所有事物融合在一起的情况。
答案 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;