2017-07-17 54 views
1

我不熟悉SQL,试图创建一个视图,该视图组合来自读数据库和失败数据库的数据。我想创建一个按目标名称,度量标准名称,然后按时间戳排序的视图,并附加一列,返回1表示当天出现故障,否则返回零。我写的查询目前正在阅读,我错过了一个正确的括号,但是当我消除括号时,它发现表名无效。我不确定我的案件使用是否导致了它,虽然它已经在一些练习样本上工作。任何帮助检查和如何改善它的建议将不胜感激。SQL在视图中创建一个视图与交叉引用两个表的结果

SELECT * FROM 
(
with new_failure_table as (
    SELECT target_name, END_TIMESTAMP,START_TIMESTAMP, 
    ((END_TIMESTAMP - (START_TIMESTAMP))*24*60) 
    FROM failure_table 
    WHERE (END_TIMESTAMP - (START_TIMESTAMP))*24*60 >5 
    AND (END_TIMESTAMP - START_TIMESTAMP) < 1 
    and availability_status = 'Target Down' 
    ) 
    -- Simplifies failure table to include actual failures according to two parameters 

SELECT 
    t1.target_name, 
    t1.metric_name, 
    t1.rollup_timestamp, 
    t1.average, 
    t1.minimum, 
    t1.maximum, 
    t1.standard_deviation, 
    t2.END_TIMESTAMP, 
    t2.START_TIMESTAMP, 
    (CASE 
    when t1.target_name = t2.target_name 
    and t1.rollup_timestamp = trunc(END_TIMESTAMP+1) 
    and t1.rollup_timestamp = trunc(START_TIMESTAMP+1) 
    THEN '1' ELSE '0' END) AS failure_status 
    --Used to create column that reads 1 when there was a failure between the two readings and 0 otherwise  

FROM 
    data_readings AS t1, new_failure_table AS t2 
WHERE t1.target_name = t2.target_name  
) 

GROUP BY t1.target_name, metric_name 
ORDER BY rollup_timestamp desc; 

回答

0

你不需要包装在括号case相反,它可以

CASE 
when t1.target_name = t2.target_name 
and t1.rollup_timestamp = trunc(END_TIMESTAMP+1) 
and t1.rollup_timestamp = trunc(START_TIMESTAMP+1) 
THEN '1' ELSE '0' END AS failure_status 
FROM

也不要使用AS代替:

... 
FROM data_readings AS t1, new_failure_table AS t2 
... 

使用

... 
FROM data_readings t1, new_failure_table t2 
... 

UPD:整个查询应该是这样的

SELECT * FROM 
(
with new_failure_table as (
    SELECT target_name, END_TIMESTAMP,START_TIMESTAMP, 
    ((END_TIMESTAMP - (START_TIMESTAMP))*24*60) 
    FROM failure_table 
    WHERE (END_TIMESTAMP - (START_TIMESTAMP))*24*60 >5 
    AND (END_TIMESTAMP - START_TIMESTAMP) < 1 
    and availability_status = 'Target Down' 
    ) 
    -- Simplifies failure table to include actual failures according to two parameters 

SELECT 
    t1.target_name as target_name, 
    t1.metric_name as metric_name, 
    t1.rollup_timestamp as rollup_timestamp, 
    t1.average, 
    t1.minimum, 
    t1.maximum, 
    t1.standard_deviation, 
    t2.END_TIMESTAMP, 
    t2.START_TIMESTAMP, 
    CASE 
    when t1.target_name = t2.target_name 
    and t1.rollup_timestamp = trunc(END_TIMESTAMP+1) 
    and t1.rollup_timestamp = trunc(START_TIMESTAMP+1) 
    THEN '1' ELSE '0' END AS failure_status 
    --Used to create column that reads 1 when there was a failure between the two readings and 0 otherwise  

FROM 
    data_readings t1, new_failure_table t2 
WHERE t1.target_name = t2.target_name  
) 
GROUP BY target_name, metric_name 
ORDER BY rollup_timestamp desc; 
+0

嗨Hatik,括号错误现在是28行,我认为这是刚刚在GROUP BY功能上面。我不确定,因为所有括号似乎都匹配。 – AlwaysInTheDark

+0

@AlwaysInTheDark尝试在''order by' – Hatik

+0

之后移动与'group by'有关的圆括号。奇怪的是,移动它后同样的错误是同一行。如果它表示缺少右括号,其他地方的函数是否需要括号? – AlwaysInTheDark

相关问题