我不清楚關於基於以下聯接方式:Netezza公司 - 加入2個表,其中日期不匹配
我有以下2分的記錄,並尋求建立上市結果集。
我會加入[符號]和???對於每個[Rec_ID]並且在(或)等於[Record_Dt]之前返回[Effective_dt]的有效[Value_int]。有沒有辦法使用JOIN來實現這一點? INNER JOIN會很好,因爲如果在[Record_Dt]之前找不到[Effectivedt],我不需要返回值。任何援助非常感謝。
我不清楚關於基於以下聯接方式:Netezza公司 - 加入2個表,其中日期不匹配
我有以下2分的記錄,並尋求建立上市結果集。
我會加入[符號]和???對於每個[Rec_ID]並且在(或)等於[Record_Dt]之前返回[Effective_dt]的有效[Value_int]。有沒有辦法使用JOIN來實現這一點? INNER JOIN會很好,因爲如果在[Record_Dt]之前找不到[Effectivedt],我不需要返回值。任何援助非常感謝。
正如您可能已經發現的那樣,TOP和與特定形式的相關子查詢在Netezza中不起作用。
在Netezza中工作的方法是使用LAG加入子查詢。
SELECT a.rec_id,
a.symbol,
b.value_int
FROM tableA a
LEFT OUTER JOIN
(
SELECT symbol,
value_int,
eff_dt,
lag(eff_dt, 1,'3999-01-01'::DATE) over (partition BY symbol ORDER BY eff_dt DESC) end_eff_dt
FROM tableB
)
b
ON a.symbol = b.symbol
AND a.record_dt >= b.eff_dt
AND a.record_dt < b.end_eff_dt
ORDER BY rec_id;
REC_ID | SYMBOL | VALUE_INT
--------+--------+-----------
1 | A | 1094
2 | A | 2523423
3 | A | 643532
4 | A | 643532
5 | B | 34242
6 | B | 534632
7 | B | 8567555
8 | B | 5665
9 | B |
(9 rows)
你在做什麼看起來很像引用一個緩慢變化的維度。如果是這樣,則應考慮預先計算下一個/結束生效日期作爲ETL的一部分,並將其存儲在tableB中以獲得更高效的查詢。
我可以用查詢中的子查詢來產生你的期望。我不認爲有一種方法可以只通過連接來完成。
CREATE TABLE #tableA
(
rec_id int,
symbol varchar(20),
record_dt datetime
);
CREATE TABLE #tableB
(
symbol varchar(20),
value_int int,
eff_dt datetime
);
INSERT INTO #tableA
(rec_id, symbol, record_dt)
VALUES
(1, 'A', '10-01-2014'),
(2, 'A', '07-10-2014'),
(3, 'A', '04-01-2014'),
(4, 'A', '03-27-2014'),
(5, 'B', '09-02-2014'),
(6, 'B', '08-30-2014'),
(7, 'B', '04-01-2014'),
(8, 'B', '02-20-2014'),
(8, 'B', '01-01-2014');
INSERT INTO #tableB
(symbol, value_int, eff_dt)
VALUES
('A', 1094, '09-02-2014'),
('A', 328087, '08-18-2014'),
('A', 2523423, '05-21-2014'),
('A', 643532, '03-27-2014'),
('B', 34242, '09-02-2014'),
('B', 534632, '08-18-2014'),
('B', 22342, '05-21-2014'),
('B', 8567555, '03-27-2014'),
('B', 5665, '01-10-2014');
SELECT a.rec_id
, a.symbol
, (SELECT TOP 1 value_int
from #tableB b
WHERE a.symbol = b.symbol and a.record_dt >= b.eff_dt
order by b.eff_dt desc)
FROM #tableA a
DROP TABLE #tableA
DROP TABLE #tableB
簡直太棒了。感謝斯科特 – 2014-12-02 21:42:56