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”条款,声称这样做但经过几次尝试,我无法让它们工作。
答案 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
。)