これは単純なように見えるかもしれませんが、何とかそうではありません。私が持っているこのようになりますTBL_Aと呼ばれる実績率データのテーブル:サブクエリの最初の行にOracleが結合します
| id | hours | added_date |
|--------|---------|--------------|
| bill | 10 | 2/26/2011 |
| ted | 4 | 7/4/2011 |
| bill | 9 | 10/14/2011 |
:
TBL_Bで
| id | rate | added_date |
|--------|--------|--------------|
| bill | 7.50 | 1/24/2011 |
| joe | 8.50 | 5/3/2011 |
| ted | 8.50 | 4/17/2011 |
| bill | 9.00 | 9/29/2011 |
、私は原価計算の情報を取得するために、TBL_Aの単一の行に参加する必要がある時間を持っています
ご覧のとおり、Billの場合、TBL_Aには2つの料金がありますが、日付は異なります。一定期間Billのコストを適切に取得するには、TBL_Aの行にTBL_Bの各行をその日付に合うように参加させる必要があります。
これは簡単だと思いました。これは例外的に高速なクエリを必要としないため、コスト情報の各行に対して個別のサブクエリを実行できます。ただし、結合されたサブクエリは、結合された他のテーブルを「見る」ことはできません。問題は、単にアプローチは、私が今までできを取った場合、私は知らない、スコーピングされている場合は
SELECT h.id, r.rate * h.hours as "COST", h.added_date
FROM TBL_B h
JOIN (SELECT * FROM (
SELECT i.id, i.rate
FROM TBL_A i
WHERE i.id = h.id and i.added_date < h.added_date
ORDER BY i.added_date DESC)
WHERE rownum = 1) r
ON h.id = r.id
:このクエリは、「H」の別名を持つサブクエリで何かに無効な識別子を(ORA-00904)スロー作業。しかし、私がここでやろうとしているのは、いくつかの基準に基づいて単一の行を得ることなので、私は他のメソッドには絶対にオープンです。
EDIT:ビルは、テーブル内の2つのエントリ内の2つの異なる速度を有する
| id | cost | added_date |
|--------|---------|--------------|
| bill | 75 | 2/26/2011 |
| ted | 34 | 7/4/2011 |
| bill | 81 | 10/14/2011 |
注:所望の出力は、このあろう。最初の行は、10 * 7.50 = 75であり、2行目は、9×9.00 = 81
希望する出力は何ですか?時間の合計? –
私はそれがあいまいだったと思う、私はより具体的に私の質問を編集しました。 – monitorjbl