Sql 仅获取数据库中的更改
我在数据库中有一个按日期排序的视图,如下所示:Sql 仅获取数据库中的更改,sql,sybase,Sql,Sybase,我在数据库中有一个按日期排序的视图,如下所示: date company_name share 25.7.2016 Apple 20 25.7.2016 Samsung 50 26.7.2016 Apple 20 26.7.2016 Samsung 50 27.7.2016 Apple
date company_name share
25.7.2016 Apple 20
25.7.2016 Samsung 50
26.7.2016 Apple 20
26.7.2016 Samsung 50
27.7.2016 Apple 30
27.7.2016 Samsung 40
我需要做的是检查两个后续日期之间的数据是否相同。如果是,则仅显示第一个日期的数据
在我的示例中,2016年7月25日的数据与2016年7月26日的数据相同,而2016年7月26日的数据与前一天的数据不同
因此,我需要我的视图看起来像:
date company_name share
25.7.2016 Apple 20
25.7.2016 Samsung 50
27.7.2016 Apple 30
27.7.2016 Samsung 40
我怎样才能做到这一点呢?既然您没有提到您使用的是哪个数据库,我就用伪代码为您提供一个逻辑解决方案:
if previous company_name = company_name AND previous share = share
if true then nothing
可以使用窗口函数lag访问前一行的值:
select date, company_name, share
from (
select date, company_name, share,
lag(share) over (partition by company_name order by date) as prev_share
from sometable
) x
where (prev_share is null or prev_share <> share)
order by date, company_name;
prev_share为null是将group=分区的第一行包含在结果中所必需的。这也可以通过lag函数的默认值来实现
您没有说明您的DBMS,但上面的SQL是适用于任何的标准SQL。请标记正在使用的数据库。@VamsiPrabhala我们可以假设视图是实际的表,并且我需要一个查询来只返回两个后续日期之间的不同记录吗?您使用的是什么数据库?SQL Server、MySQL、其他?