仅获取数据库中的更改

Get only changes in the database

我在数据库中有一个按日期排序的视图如下:

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

我需要做的是检查两个后续日期之间的数据是否相同。如果是,只显示第一个日期的数据。

在我的示例中,日期 25.7.2016 的数据与 26.7.2016 的数据相同,而日期 26.7.2016 的数据与前一个数据不同。

所以我需要我的视图看起来像:

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

这可以使用 window 函数 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 is null 是在结果中包含 "group"(=分区)的第一行所必需的。这也可以使用 lag() 函数的默认值来完成。

您没有说明您的 DBMS,但以上是适用于任何 modern DBMS

的标准 SQL