Sql update 红移-更新红移数据库中的特定列

Sql update 红移-更新红移数据库中的特定列,sql-update,amazon-redshift,increment,Sql Update,Amazon Redshift,Increment,我有一个存储销售数据的销售表。此表每天更新一次增量更新。我正在尝试更新此表中的一列,以计算自销售日起的账龄 update sales set aging = (select CASE WHEN sale_date > current_date-28 AND sale_date < current_date -14 THEN '2 - 4 Weeks Ago' WHEN terminated_at > current_date-14 AND

我有一个存储销售数据的销售表。此表每天更新一次增量更新。我正在尝试更新此表中的一列,以计算自销售日起的账龄

update sales set aging = (select CASE WHEN sale_date > current_date-28 AND sale_date < current_date -14 THEN '2 - 4 Weeks Ago'
                    WHEN terminated_at > current_date-14 AND terminated_at < current_date THEN '0 - 2 Weeks Ago'
                    WHEN terminated_at < current_date-28 THEN '4+ Weeks Ago' ELSE 'Unknown' end as aging from sales) ;
我得到无效操作:无效查询错误。谁能帮我找到我在这件事上哪里出了问题

我使用的是亚马逊红移数据库


谢谢。

您可能只需删除更新右侧的select:

UPDATE sales
SET aging = CASE WHEN sale_date > current_date - 28 AND sale_date < current_date - 14
                 THEN '2 - 4 Weeks Ago'
                 WHEN terminated_at > current_date - 14 AND terminated_at < current_date
                 THEN '0 - 2 Weeks Ago'
                 WHEN terminated_at < current_date - 28
                 THEN '4+ Weeks Ago'
                 ELSE 'Unknown' END;

但是,我觉得也许您不应该将这些信息存储在SQL表中。相反,您可以在需要时选择使用相同的大小写表达式来生成此输出。我之所以这样说,是因为在添加新记录以及新的日期信息时,必须再次计算此计算列,这可能会很昂贵。

您可能只需删除更新右侧的select:

UPDATE sales
SET aging = CASE WHEN sale_date > current_date - 28 AND sale_date < current_date - 14
                 THEN '2 - 4 Weeks Ago'
                 WHEN terminated_at > current_date - 14 AND terminated_at < current_date
                 THEN '0 - 2 Weeks Ago'
                 WHEN terminated_at < current_date - 28
                 THEN '4+ Weeks Ago'
                 ELSE 'Unknown' END;

但是,我觉得也许您不应该将这些信息存储在SQL表中。相反,您可以在需要时选择使用相同的大小写表达式来生成此输出。我之所以这样说,是因为在添加新记录以及新的日期信息时,必须再次计算此计算列,这可能会很昂贵。

谢谢@tim,这很有帮助。我这样做的原因是,当前表每天都在增量更新,但账龄值是错误的,因为它们没有针对过去完成的销售进行更新。考虑到当前的更新结构,我相信这是最好的选择。谢谢@tim,这很有帮助。我这样做的原因是,当前表每天都在增量更新,但账龄值是错误的,因为它们没有针对过去完成的销售进行更新。我认为,考虑到当前的更新结构,这是最好的选择。