2017-09-26 204 views
-1

只改變我有一個觀點在如下這是按日期順序整理數據庫:在數據庫中保存

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 

我怎樣才能做到這一點?

+4

作品請標籤爲使用的數據庫。 –

+0

@VamsiPrabhala我們可以假設該視圖是實際的表,並且我需要一個查詢來返回兩個結果日期之間的不同記錄嗎? –

+2

你使用了哪個數據庫? SQL Server,MySQL,其他? –

回答

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必須包括在結果的「基團」(=分區)的第一行。這可以通過lag()函數的默認值完成。

你不說出你的DBMS,但上面是標準的SQL任何modern DBMS

-1

因爲你沒有提到你用,我給你在僞代碼的邏輯解決方案時的數據庫:

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