這看起來可能很簡單,但不知怎的,事實並非如此。我有一個名爲TBL_A歷史匯率數據表看起來像這樣:Oracle加入子查詢的第一行
| 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_B,我有需要,以獲得成本信息要加入到TBL_A單行小時:
| id | hours | added_date |
|--------|---------|--------------|
| bill | 10 | 2/26/2011 |
| ted | 4 | 7/4/2011 |
| bill | 9 | 10/14/2011 |
正如您所看到的,對於比爾,TBL_A有兩種費率,但他們有不同的日期。要在一段時間內正確獲取Bill的成本,您必須將每行TBL_B連接到適合該日期的TBL_A的一行中。
我覺得這很容易;因爲這不需要特別快速的查詢,所以我可以爲成本信息的每一行執行一個單獨的子查詢。但是,加入子查詢顯然不能「看到」他們加入的其他表。這個查詢在具有「H」別名的子查詢上的任何東西拋出一個無效的標識符(ORA-00904):
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
如果問題僅僅是範圍界定,我不知道如果我的做法了以往任何時候都可以工作。但是我想在這裏做的是根據一些標準獲得單行,所以我絕對可以使用其他方法。
編輯:所需的輸出會是這樣:
| id | cost | added_date |
|--------|---------|--------------|
| bill | 75 | 2/26/2011 |
| ted | 34 | 7/4/2011 |
| bill | 81 | 10/14/2011 |
注意,比爾在表格中的兩個條目兩個不同的利率。第一行是10 * 7.50 = 75和第二行是9 * 9.00 = 81
什麼是期望的輸出?小時數的總和? – 2012-01-09 17:08:42
我想這是模糊的,我編輯我的問題是更具體。 – monitorjbl 2012-01-09 17:39:16