2017-09-26 23 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 

私が行うために必要なものは、2つの結果としての日付の間のデータが同じであるかどうかを確認することです。はいの場合は、最初の日付のデータのみを表示します。

私の例では、日付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

上で動作し、標準のSQLです。 –

+0

@ VamsiPrabhalaは、ビューが実際のテーブルであると仮定できます.2つの結果の日付間で異なるレコードのみを返すクエリが必要ですか? –

+2

あなたはどのデータベースを使用していますか? SQL Server、MySQL、その他 –

答えて

2

を前の行の:

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を述べなかったが、上記のいずれかのmodern DBMS

-1

あなたはあなたが作業しているデータベースは言及しなかったので、私はあなたの擬似コードで論理的な解決策与えている:これは値にアクセスするために窓関数lag()を使用して行うことができる

if previous company_name = company_name AND previous share = share 
if true then nothing 
関連する問題