SQL SELECT 语句跳过基于 WHERE 语句的行
SQL SELECT statement skips rows based on WHERE statement
抱歉,这可能是个愚蠢的问题!我创建了一个程序来维护 运行 一系列 procedures/functions。如果任何过程发生错误,都会向我发送电子邮件,并使用失败的过程名称设置自动刷新参数。单个 table 以循环结构自上而下的顺序包含所有过程(确切名称为 varchar2)到 运行。我如何才能跳到使用 select 语句失败的过程,同时获取失败过程下的所有其他过程?基本上我希望程序从它停止的地方开始,并继续 运行 宁所有其他程序的过程。我会很感激任何想法,因为我只是在学习。
更新
对于那些困惑的人。我需要一个 SELECT 语句来跳过基于 where 的行并获取第一行下面的所有其他行。下面的基本伪代码...
SELECT procedure_name
FROM table_whatever
SKIP ROWS that procedure_status <> 'completed'
AND grab all rows underneath
WHILST keeping rows in proper order
id procedure status
15 table_insert failed
16 table_update In Queue
17 email_completion In Queue
我需要抓取失败的过程以及下面的所有内容。
有什么想法吗?
提前致谢!
我咬,算了。根据您上面的数据,假设只有一行的状态为 'failed',并假设程序的顺序为 'id':
SELECT procedure
FROM table_whatever
WHERE id >= (SELECT ID
FROM table_whatever
where status = 'failed')
ORDER by id;
根据你的最小伪代码,假设 'proper order' 是 ID,你可以排除那些已完成的:
SELECT procedure_name
FROM table_whatever
WHERE procedure_status <> 'completed'
ORDER BY id;
如果您明确想要查找 'failed' - 或者可以使用相同的查询在任何内容具有 运行 之前启动序列 - 您可以使用分析查询和内联视图,所以你只需要点击一次 table:
SELECT procedure_name
FROM (
SELECT id, procedure_name, procedure_status,
MIN(CASE WHEN procedure_status = 'failed' THEN id END) OVER () AS failed_id
FROM table_whatever
)
WHERE id >= COALESCE(failed_id, 0)
ORDER BY id;
对于一个小的 table 来说,打两次可能没什么大不了的,所以 Gary_W 的子查询方法也可以工作...
抱歉,这可能是个愚蠢的问题!我创建了一个程序来维护 运行 一系列 procedures/functions。如果任何过程发生错误,都会向我发送电子邮件,并使用失败的过程名称设置自动刷新参数。单个 table 以循环结构自上而下的顺序包含所有过程(确切名称为 varchar2)到 运行。我如何才能跳到使用 select 语句失败的过程,同时获取失败过程下的所有其他过程?基本上我希望程序从它停止的地方开始,并继续 运行 宁所有其他程序的过程。我会很感激任何想法,因为我只是在学习。
更新
对于那些困惑的人。我需要一个 SELECT 语句来跳过基于 where 的行并获取第一行下面的所有其他行。下面的基本伪代码...
SELECT procedure_name
FROM table_whatever
SKIP ROWS that procedure_status <> 'completed'
AND grab all rows underneath
WHILST keeping rows in proper order
id procedure status
15 table_insert failed
16 table_update In Queue
17 email_completion In Queue
我需要抓取失败的过程以及下面的所有内容。
有什么想法吗?
提前致谢!
我咬,算了。根据您上面的数据,假设只有一行的状态为 'failed',并假设程序的顺序为 'id':
SELECT procedure
FROM table_whatever
WHERE id >= (SELECT ID
FROM table_whatever
where status = 'failed')
ORDER by id;
根据你的最小伪代码,假设 'proper order' 是 ID,你可以排除那些已完成的:
SELECT procedure_name
FROM table_whatever
WHERE procedure_status <> 'completed'
ORDER BY id;
如果您明确想要查找 'failed' - 或者可以使用相同的查询在任何内容具有 运行 之前启动序列 - 您可以使用分析查询和内联视图,所以你只需要点击一次 table:
SELECT procedure_name
FROM (
SELECT id, procedure_name, procedure_status,
MIN(CASE WHEN procedure_status = 'failed' THEN id END) OVER () AS failed_id
FROM table_whatever
)
WHERE id >= COALESCE(failed_id, 0)
ORDER BY id;
对于一个小的 table 来说,打两次可能没什么大不了的,所以 Gary_W 的子查询方法也可以工作...