1

私が書いている 1 つのクエリに少し問題があります。日付列を同じテーブルの最小値と比較するwhere句で、多くの結合と抽出する列がたくさんあります。しかし、2 つの行で同じ日付を取得した場合、取得する必要があるのは 1 つの行だけです。where 句は次のようになります。

bt.da2 = (select min(btreg.da2) from bt btreg.....

クエリの結果は多くの顧客であり、すべての顧客はその bt.da2 日付を持っています。1 人の顧客が同じ値の bt.da2 を持つ 2 つの行を持っている場合、2 つの行ではなく、2 つの行のうちの 1 つだけを取得する必要があります。私は自分自身を明確に説明していないかもしれません。誰かが私が何を求めているのか少し手がかりがあり、何かが明確でない場合は、私に尋ねてください。

私は使用していますPostgreSQL 8.3

よろしく、ジュリアン

4

2 に答える 2

2

情報が少なくて分かりにくいのですが、以下のようにしてみました。

select *
from (
  select product_id, -- assumed to be the primary key 
         ...
         row_number() over (partition by product_id order by bt.da2) as rn
  from products pr
    left join bt on bt.da2 = pr.some_col
) t
where rn = 1

このrow_number()関数は、各製品の連続番号を作成するために使用されます。次に、外側のwhere句が最初の句を選択します。order byウィンドウ定義の を変更して、どちらを選択するかに影響を与えることができます。

于 2013-02-26T12:50:57.717 に答える
0

次を使用して、da2の重複する値を分類できるはずです。

bt.da2 = (select distinct min(btreg.da2) from bt btreg.....

PostgreSQL 9.1を使用してこれを試しましたが、8.4でもdistinctキーワードが期待どおりに機能すると確信しています。

于 2013-02-26T10:37:49.060 に答える