我有一个包含4列的SQL表:' date',' machine',' failure'并且警告'。
日期列具有连续日期(日复一日),但重复不同计算机的相同日期。失败列为0s和1s。
警告列目前为空白。我想用' 1'填充警告列值。对于有问题的机器,在失败前30天的每个日期(即失败栏中出现“'”)。
如何为此编写查询?是否有必要创建另一个表?
以下是我尝试的内容:
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的。
答案 0 :(得分:1)
以下是使用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上运行。
答案 1 :(得分:0)
我真的不明白你何时更新,但你需要UPDATE
而不是INSERT
UPDATE mytable
SET warning = 0
THEN
UPDATE mytable
SET warning = 1
WHERE (Failure = 1) AND (date BETWEEN (date - 30) AND date)