2

データを含む2つのテーブルがあり、1つのテーブルだけでやりたいことを行う方法の例をたくさん見てきましたが(ここでもSOで)、Firebirdを使用して複数のテーブルでそれを行う方法がよくわかりません(これはおそらく、ほとんどの人が単純な SQL と考えるものとそれほど違いはありません)、しかし、私はそれについて十分に知っているわけではありません。

ともかく -

次のコードがあります。

select cqd.customer_price, cqd.entry_date, pnm.pn
  from cq_detail cqd, parts_master pnm
 where cqd.pnm_auto_key = pnm.pnm_auto_key
 order by cqd.entry_date desc

以下のサンプルのように、正しいデータが返されます。

CUSTOMER_PRICE, ENTRY_DATE, PN
------------------------------
1,052.00        08.01.2012, 1938-12
1,054.00        08.02.2012, 1938-12
1,050.00        08.08.2012, 1938-12
1,051.00        08.04.2012, 1938-12
5,052.00        08.20.2012, 9999-19
7,054.00        08.07.2012, 9999-19
3,030.00        08.12.2012, 9999-19
6,021.00        08.04.2012, 9999-19

私は完全に満足しています。残念ながら、結果セットが次のようになることを望んでいる権限は次のとおりです。

CUSTOMER_PRICE, ENTRY_DATE, PN
------------------------------
1,050.00        08.08.2012, 1938-12
5,052.00        08.20.2012, 9999-19

SQL は私の通常の仕事ではありません。私たちの通常の SQL 担当者は不在であり、彼が不在の間、より単純な項目のいくつかを処理しようとしています。

したがって、簡単に言えば、特定の PN ごとに最新の日付を返す必要があると思います。入れ子になった選択または何らかの形式の JOIN が必要になると思いますが、最近ではそれらは私を少し超えています。

前もって感謝します。

JB

4

1 に答える 1

3
select a.pn,b.entry_date,c.pn from
(select  pnm.pn as pn,max(cqd.entry_date) as max_entry_date
  from cq_detail as cqd, parts_master pnm
 where cqd.pnm_auto_key = pnm.pnm_auto_key
group by pnm.pn) a

inner join 

(select cqd.customer_price as customer_price, cqd.entry_date as entry_date, pnm.pn as pn
  from cq_detail cqd, parts_master pnm
 where cqd.pnm_auto_key = pnm.pnm_auto_key) as b 
on a.pn=b.pn and a.max_entry_date=b.entry_date
order by b.entry_date
于 2012-12-08T05:48:53.727 に答える