2016-07-16 5 views
0

で非一意な列上の2つのテーブルを結合左は、私は、SQL Serverの2つのテーブルを持っていると私はこれらのtable.the最初のテーブルからいくつかのデータを選択したいと参加のようないくつかの顧客を持っている右の表

------------------ 
product date  customer id 
PC   1-1-2000 1 
phone  2-3-2000 2 
laptop  3-1-2000 1 
------------------ 

が、私は彼らの購入の最後の日に最初のテーブル(顧客情報)を選択したい:とコストとその顧客との最後の購入のリストを含んで購入の第2のテーブルIテーブルには、その製品を買いました! 私は左に参加しようとしましたが、顧客IDが2番目のテーブルで一意ではないので、それは私に最後の購入を与えません!どのように私はSQLサーバーのクエリでこの機能を行うことができますか?よろしくお願いいたします

答えて

1

勝利のためにnot exists句を使用してください!

select c.customer, p.* 
from Customer as c 
inner join Purchase as p 
on  p.customer_id = c.id 
where not exists (
     select 1 
     from Purchase as p2 
     where p2.customer_id = p.customer_id 
     and p2.date > p.date 
     ) 
0

は、私はあなただけで最大日付、使用集計をしたい場合は、

select table1.customer, table1.id, table.max(date) 
from table1 
inner join table2 on table1.id = table2.id 
group by table1.customer, table1.id 
0

によって内部結合を使用してグループができると思います。

select c.customer, c.id, max(p.date) 
from customers c left join 
    purchases p 
    on c.id = p.customer_id 
group by c.customer, c.id; 
+0

が、これは働いていたが、私は私のコードを完了したときに実際に私は問題に直面した:私は買い物をしていない顧客のためleft joinをお勧めします。私は購入テーブルに別の列(売り手)を持っています.P.Sellerを選択すると、左側の結合は機能せず、Pテーブルからいくつかの行が選択されます。私はどのようにmax(p.date)の売り手を得ることができますか? – iman

+0

@iman。 。 。適切なサンプルデータと必要な結果とともに、別の質問をします。 –

関連する問題