2017-03-03 18 views
0

私は2つのテーブルをキーとリンクすることができます。問題は、1つのテーブルもタイムスライスされていることです。私はこのテーブルから2行しか必要としませんが、異なる時間に多くのことが繰り返されます。だから私はこのテーブルから選択した別個の値を行い、それを他のテーブルにリンクしたいと思っています。 私がやろう何:このコードを実行選択と結合を結合で選択する

SELECT a.firstcolumn, 
     a.secondcolumn, 
     b.somecolumn 
from table1 a 
INNER JOIN (SELECT DISTINCT somecolumn from table2) b 
    on a.key = b.key 

が、私は(ほぼ2倍)あまりにも多くのレコードを取得するので、個別のは、何とかその仕事をしていません。 出力にa.firstcolumn、a.secondcolumn、およびb.somecolumnが含まれます。

+1

table2列を選択しないため、JOINではなくEXISTSを使用できます。 – jarlh

+0

2行にしたい場合は、LIMITを試してみませんか? –

+0

@ jarlh。 。 。 OPは、bの列が出力にあることを明らかにしたので、追加しました。 –

答えて

0

これはコメントには長すぎます。タイムスライスされたテーブルを使用している場合、その目的は値を選択するための日付/時刻を持つことです。多くの場合、最も最近の値は、end_dt(より良い言葉の欠如のため)が遠く、またはNULLのものです。

SELECT a.firstcolumn, a.secondcolumn, b.somecolumn 
FROM table1 a JOIN 
    b 
    ON a.key = b.key AND b.end_dt IS NULL; 
+0

はい、私はそれについて考えましたが、私はデータ列をうまく埋めることはできません。 –

0

は多分明確なをドロップし、あなたが必要なものを与える日付フィールドの最大値(または最小)を取る:

あなたのデータ構造を知らなくても、私はこのような何かを期待します。

SELECT a.firstcolumn, 
     a.secondcolumn, 
     b.somecolumn 
from table1 a 
INNER JOIN (SELECT key, somecolumn, max(date) from table2 group by key, somecolumn) b 
    on a.key = b.key 
+0

これは、日付フィールドが正しく入力された場合に機能します。また、私はDATETO = "99991231"またはDATETO = "18991231"もあります。 –

+0

@GertKnoops日付が間違っていてもまだ動作すると思います。フィールドが日付または数値データ型である限り、最大値または最小値のみが使用されます。最終出力でデータを破棄しているので、無効な日付のレコードが使用されているかどうかは関係ありません。 –

関連する問題