oracle sql developer:识别表中随时间变化的字段

时间:2013-05-06 12:09:08

标签: sql oracle oracle-sqldeveloper with-statement

Oracle版本: Oracle数据库10g企业版10.2.0.4.0版 - 产品

我的表结构:

Field 1: Name
Field 2: Year
Field 2: Sales_Rev
Field 3: Rep_Cat

Rep_Cat: Inside, Outside, Lead

有三种类型

每当Rep_Cat字段值发生变化时,我都需要识别。所以,如果在1993年(年),鲍勃(姓名)是内部代表(Rep_Cat),1994年鲍勃成为外部代表,我希望查询返回1993年和1994年的鲍勃行。

我在这个网站上看到了一些“With”条款,声称这样做但经过几次尝试,我无法让它们工作。

2 个答案:

答案 0 :(得分:0)

假设名称是唯一的密钥

这是一种可能的方式..

SELECT * from yourTable where Name in (
SELECT Name
FROM yourtable
GROUP BU name
HAVING count(Distinct Rep_cat) > 1)

答案 1 :(得分:0)

这是分析功能的一个非常好的机会。试试这个:

select t.*
from (select t.*,
             lag(rep_cat) over (partition by name order by year) as prev_rep_cat
      from t
     ) t
where rep_cat <> pre_rep_cat

注意:这也告诉您prev_rep_cat字段的前一个值是什么。此外,由于NULL自动无法进行比较,因此您不会获得每个名称的第一行。 (如果您需要,请在or prev_rep_cat is null子句中包含where。)