我收到以下错误,第 25:8 行:无法解析列 'flag1'

I am getting the following error , line 25:8: Column 'flag1' cannot be resolved

我在 presto 中编写了以下查询,它给出了错误:行 [​​=16=]:无法解析列 'flag1'。必须合并标志条件。我有 运行 一个关于 redshift 的类似查询没有任何问题。

select dt,CASE WHEN date_diff ('day',fod,dt) <= 28 then 'New' ELSE 'Old'
                   END AS flag1,COUNT(us.user_id) AS users,SUM(views) AS o_views,SUM(orders) AS orderss
FROM
(
 (select dt,user_id,portfolio_views as views ,portfolio_orders as orders
FROM gold.user_daily_osv
 ) AS us
JOIN
(select user_id,CAST(first_order_ts as DATE) as fod
from gold.prism__user_master_bi
) as um
ON
us.user_id=um.user_id)
 WHERE flag1 = 'New'
group by 1,2
order by 1 desc

考虑将 WHERE flag1 = 'New' 更改为 WHERE date_diff ('day',fod,dt) <= 28

SELECT
    dt,
    CASE 
        WHEN date_diff ('day',fod,dt) <= 28 then 'New' 
        ELSE 'Old' 
    END AS flag1,
    COUNT(us.user_id) AS users,
    SUM(views) AS o_views,
    SUM(orders) AS orderss 
FROM ( 
    (
    select 
        dt,
        user_id,
        portfolio_views as views ,
        portfolio_orders as orders 
    FROM 
        gold.user_daily_osv 
    ) AS us 
    JOIN (
           select 
               user_id,
               CAST(first_order_ts as DATE) as fod 
           from gold.prism__user_master_bi 
    ) as um ON us.user_id=um.user_id
) 
WHERE date_diff ('day',fod,dt) <= 28 
group by 1,2 
order by 1 desc

你为什么还要费心去定义标志?你可以只使用:

SELECT udo.dt, 'New' as flag1,
       COUNT(*) AS users,
       SUM(udo.portfolio_views) AS o_views,
       SUM(udo.portfolio_orders) AS orderss 
FROM gold.user_daily_osv udo JOIN
     gold.prism__user_master_bi um
     ON us.user_id = um.user_id
WHERE date_diff('day', CAST(um.first_order_ts as DATE), udo.dt) <= 28 
GROUP BY 1
ORDER BY 1 DESC;

备注:

  • 使用 table 别名使查询更易于编写和阅读。
  • 不需要子查询。
  • 我更喜欢直接比较日期而不是使用 date_diff(),但我在您的代码中留下了 date_diff()
  • COUNT() 在没有列的情况下工作。不需要统计一列非NULL值的个数。只需使用 COUNT(*)。或者,如果您愿意,COUNT(1).