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、其他?