2012-04-01 16 views
0

私は2つのテーブルに結合しようとしています。そして、あるテーブルの日付が別のテーブルの日付よりも大きい最小IDを求めます。私はこれが簡単な仕事だと思うが、それは私にフィット感を与えている。表1に日付が、それはすべてのIDSない日よりも大きいものだけを結合table2のより大きいいったんので、テーブルを結合する指定日付条件

select table1.id, MIN(table2.id) 

FROM table1 
    INNER JOIN table2 
    ON table2.id = table1.id 

WHERE table1.date > table2.date 

これは動作しません。ここで

は私の素朴な試みでした。それが何であっても最小のIDを返すことを意味します。明確にするため

おかげ

EDIT:

製品

id | price_date 
--------------- 
1 | 2011-01-02 

価格

id | fid | price_date 
--------------- 
1 | 1 | 2011-01-01 
2 | 1 | 2012-01-01 

だから私は

product.id | price.id 
--------------------- 
    1  | 1 
を返すようにしたいです

答えて

0

私はこれが本当に好きではない、少し力説しているようだ。しかし、それはあなたが探している結果の種類ですか?

EDITは、サンプルデータと一致します

select id AS product_id 
     ,(select min(id) 
      from price 
      where fid = p.id 
      and price_date <= p.price_date 
     ) AS price_id 
    from product p 

EDIT2:FKの関係を示すサンプルデータは、ニコラの応答がよりよい解決策であると:

select p.id AS product_id 
     ,MIN(x.id) AS price_id 
    from product p 
     ,price x 
    where x.fid = p.id 
    and x.price_date <= p.price_date 
    group by p.id 
+0

はねえ、おかげで、それは基本的に私に同じことを示しますが、代わりに左の外側ではなく内側の参加私の参加として機能しています。 – tshauck

+0

@tshauck期待される結果を持つサンプルデータを2行入れてもいいですか?私はこれはあなたの試みとは少し違っていると思います。ここでの質問は、table1の各レコード(これは私が気に入らない部分です)で実行されますが、質問の試みは2つのテーブル間のidsを結合しています。 (つまり、結合は "from"リストではなく、 "select"リストにあります。 – Glenn

+0

ありがとうございます。 – tshauck

0

私はかなり理解していませんあなたが達成しようとしているもの - table1.date> table2.dateがあるtable1の各行に対してtable2のmin()を返すことを前提としています。この場合、サブ選択を使用することができます:

SELECT table1.id, (SELECT min(id) FROM table2 WHERE table1.date > table2.date) 
FROM table1 
    INNER JOIN table2 
    ON table2.id = table1.id AND table1.date > table2.date 
1

これはあなたが探しているものかもしれません。

select table1.id, 
     table1.date, 
     MIN(table2.date) Table2MinDate, 
     MIN(table2.id) Table2SmallestID 
FROM table1 
    INNER JOIN table2 
    ON table1.date < table2.date 
group by table1.id, table1.date 
order by 1, 2 

は、私は強くTABLE1とtable2の間の結合条件が存在すべきであると信じていますが、意味がありませんtable2のから最小限のIDを求めているので、それはIDをすることができませんでした。常にtable1のidと同じ値を持ちます。

You might check Sql Fiddle

+1

@Nikola_Markonvinovicこの線も同様であるが、本来はクロス積がある。しかし今、サンプル・データで、私はそれがより明確になると思います。結合はproduct.idとprice.fidです。それから、私はこれが明らかに優れた解決策です。 – Glenn

関連する問題