仅获取数据库中的更改

时间:2017-09-26 00:20:23

标签: 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               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

我该怎么做?

2 个答案:

答案 0 :(得分:2)

可以使用窗口函数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必须包含&#34;组&#34;的第一行。结果中的(=分区)。这可以通过lag()函数的默认值完成。

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

答案 1 :(得分:-1)

由于您没有提到您正在使用哪个数据库,我将为您提供伪代码的逻辑解决方案:

if previous company_name = company_name AND previous share = share
if true then nothing