在数据库中保存
问题描述:
只改变我有一个观点在如下这是按日期顺序整理数据库:在数据库中保存
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
我怎样才能做到这一点?
答
这可以通过使用窗函数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
必须包括在结果的“基团”(=分区)的第一行。这可以通过lag()函数的默认值完成。
你不说出你的DBMS,但上面是标准的SQL任何modern DBMS
答
因为你没有提到你用,我给你在伪代码的逻辑解决方案时的数据库:
if previous company_name = company_name AND previous share = share
if true then nothing
作品请标签为使用的数据库。 –
@VamsiPrabhala我们可以假设该视图是实际的表,并且我需要一个查询来返回两个结果日期之间的不同记录吗? –
你使用了哪个数据库? SQL Server,MySQL,其他? –