基于条件和日期范围填充SQL表值



我有一个SQL表,有4列:'日期','机器','故障'和'警告'。

date列有连续的日期(每天),但是在不同的机器上重复相同的日期。失效列为0和1

警告列当前为空。我想在故障前30天的每个日期(即当故障列中出现'1'时)用'1'填充有问题的机器的警告列值。

我怎么写一个查询?有必要再创建一个表吗?

这是我尝试过的:

UPDATE mytable (warning)
SET warning = 1
WHERE (Failure = 1) AND (date BETWEEN (date - 30) AND date)

但是这不起作用,因为它排除了没有失败,但仍然在失败的30天内的字段。

我也试过隔离问题中的机器和日期:

SELECT date, machine
FROM mytable
WHERE (Failure = 1)

但是我不确定如何将这个子集与填充完整表中的字段相协调。

任何帮助都将非常感激。我正在寻找一个通用的SQL方法,因为这实际上是Apache Spark SQL。

下面是使用exists子句设置warning的一种方法:

update sqltable t
    set warning = 1
    where exists (select 1
                  from sqltable t2
                  where t2.machine = t.machine and
                        t2.failure = 1 and
                        t2.date between (t1.date - 30) AND t1.date)
                 );

这是标准的SQL,但我不能100%确定它将工作在Apache Spark SQL

我真的不明白你什么时候更新,但你需要UPDATE而不是INSERT

UPDATE mytable 
SET warning = 0
然后

UPDATE mytable 
SET warning = 1
WHERE (Failure = 1) AND (date BETWEEN (date - 30) AND date)

相关内容

  • 没有找到相关文章

最新更新