我正在處理一些價格數據,並且我有兩個數據庫。其中一個,我每天都有價格,另一個我有季度基本數據。 但是,每個數據庫中的股票都有不同的標識符,所以我得到了一個鏈接表。我想加入我的價格數據庫與鏈接表,所以我得到每個股票的匹配標識符。最後的目標是將這個修改後的價格表與基本數據表(我將從鏈接表中獲得的標識符進行連接)。未能成功實現左連接 - 列保留爲空
但是,我想填寫的列:Dados_CRSP.GVKEY,LINKDATE和LINKENDDATE返回null。似乎沒有對價格表進行修改。這是我第一次使用SQL,所以我可能在做一些非常愚蠢的事情! 另外,抱歉格式不正確。
的代碼和數據的一個例子如下遵循:
Dados CRSP(價格表):
+--------------+--------+---------+-------+----------+-------------+
| RET_DATE | PERMCO | PRICE | GVKEY | LINKDATE | LINKENDDATE |
+--------------+--------+---------+-------+----------+-------------+
| '1986-02-04' | 7976 | -17.625 | NULL | NULL | NULL |
| '1986-02-05' | 7976 | -18.375 | NULL | NULL | NULL |
+--------------+--------+---------+-------+----------+-------------+
LINKTABLE:
+-------+--------+--------------+--------------+
| gvkey | PERMCO | LINKDT | LINKENDDT |
+-------+--------+--------------+--------------+
| 1004 | 20000 | '1972-04-24' | '2014-12-31' |
| 1010 | 22156 | 1962-01-31', | '1984-06-28' |
+-------+--------+--------------+--------------+
CODE:
CREATE TABLE Dados_CRSP
(
RET_DATE DATE, -- date
PERMCO INTEGER, -- price identifier
PRICE FLOAT,
GVKEY integer , -- This starts empty
LINKDATE DATE , -- This starts empty
LINKENDDATE DATE -- This starts empty
)
;
LOAD DATA LOCAL INFILE filename
INTO TABLE Dados_CRSP
COLUMNS TERMINATED BY ','
IGNORE 1 LINES;
CREATE TABLE LINK_TABLE
(
GVKEY INTEGER, -- fundamental data identifier
PERMCO INTEGER,
LINKDATE DATE, -- Date when GVKEY PERMCO mapping starts for given stock
LINKENDDATE DATE -- Date when GVKEY PERMCO mapping end for given stock
)
;
LOAD DATA LOCAL INFILE filename
INTO TABLE LINK_TABLE
COLUMNS TERMINATED BY ','
IGNORE 1 LINES;
UPDATE LINK_TABLE
SET LINKENDDATE = '2014-12-31'
WHERE LINKENDDATE = '0000-00-00';
--Added indexes to make the join faster
ALTER TABLE LINK_TABLE ADD INDEX (PERMCO);
ALTER TABLE LINK_TABLE ADD INDEX (LINKDATE);
ALTER TABLE LINK_TABLE ADD INDEX (LINKENDDATE);
ALTER TABLE Dados_CRSP ADD INDEX (PERMCO);
ALTER TABLE Dados_CRSP ADD INDEX (RET_DATE);
--I make the join on matching identifiers and when the date is between the date of
--activity for the given identifier. I do this because the same company may change mapping through time`
UPDATE Dados_CRSP
LEFT JOIN LINK_TABLE ON
Dados_CRSP.PERMCO = LINK_TABLE.PERMCO
SET
Dados_CRSP.GVKEY = LINK_TABLE.GVKEY
AND Dados_CRSP.LINKDATE = LINK_TABLE.LINKDATE
AND Dados_CRSP.LINKENDDATE = LINK_TABLE.LINKENDDATE
WHERE
Dados_CRSP.RET_DATE >= LINK_TABLE.LINKDATE
AND Dados_CRSP.RET_DATE <= LINK_TABLE.LINKENDDATE;
兩個表中的日期似乎是不同的格式。 – Tim3880
這只是一個顯示的東西。這些列都是「CREATE TABLE」語句中所示的「DATE」類型。 –
@EdGibbs,這是我的不好。我從CSV中複製了一個表格,而從MySQL複製了其他表格,因此顯示效果有所不同。現在它已被糾正。 –