我在数据库中有一个视图,按日期排序:
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
我该怎么做?
答案 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