大家好 我目前有兩張表 Table1
, Table2
期望結果是把 Table1
和 Table2
價格組成一列
依照Table1
最接近 Table2
日期 (不等於且小於)
關連的條件是 以table1為主 找table2.Price
日期最接近(table2.date只能小於table1.date)
我使用 T-SQL,MSSQL
語法如下:
CREATE TABLE #Table1
(
buy_date DATETIME,
Price INT
);
CREATE TABLE #Table2
(
buy_date DATETIME,
Price INT
)
INSERT INTO #Table1 VALUES
('2018/02/01',150),
('2018/02/02',111),
('2018/02/05',200),
('2018/02/06',15),
('2018/02/07',60);
INSERT INTO #Table2 VALUES
('2018/01/31',313),
('2018/02/01',15),
('2018/02/03',20),
('2018/02/04',111),
('2018/02/06',48);
--期望輸出
SELECT '2018/02/01' , 150 , 313
UNION
SELECT '2018/02/02' , 111 , 15
UNION
SELECT '2018/02/05' , 200 , 20
UNION
SELECT '2018/02/06' , 15 , 111
UNION
SELECT '2018/02/07' , 60 , 48
以上面資料為例子:Table1.date = '2018/02/01'
離他最近的一筆 Table2
資料是 '2018/01/31'
而另一筆 Table1.date = '2018/02/06'
離他最近的一筆 Table2
資料是 '2018/02/04'
會得出
Table1.date=======Table1.Price=========Table2.Price
'2018/02/01' 150 313
'2018/02/06' 15 111
我有嘗試排序在使用Join但是不能解決我的問題
謝謝
如果是T-SQL 可以使用 CROSS APPLY
把 Table2
最靠近Table1
時間 結果集塞選出來
SELECT T1.*,T2.Price
FROM Table1 AS T1
CROSS APPLY
(
SELECT TOP 1 Price
FROM Table2
WHERE T1.buy_date > buy_date
ORDER BY buy_date DESC
) AS T2
"最接近的日期"本身的邏輯就很怪,比如"2018/02/05"最接近的日期不就是"2018/02/04"怎麼會是"2018/02/03",整個邏輯不通,如果只是順序串一起,先做RANK在JOIN即可
我想把table1 和 table2關連起來 但是關連的條件是
以table1為主 找table2.Price 日期最接近(table2.date只能小於table1.date)
我可能那部分打不清楚 已經修改問題了
雖然你做了解釋,我還是不太明白,你的意思是要把table1的第一列跟table2的第一列串一起麼
您好 我有對於 串在一起 定義說明
SELECT t1.buy_date,t1.Price,t2.Price
from (select RANK() OVER (ORDER BY buy_date ASC) SN,* FROM #Table1) t1
left join (select RANK() OVER (ORDER BY buy_date ASC) SN,* FROM #Table2) t2
on t1.sn=t2.sn
where t1.buy_date > t2.buy_date
試試
這應該需要兩個條件吧,不單只是一個日期條件,感覺有點不太通
我知道沒有最近日期的指令,因為樓主下的結果,已經忽略最接近的日期,只是一個對應;如果是最近日期dog830228的答案才正確
gn00044255 謝謝您的回答
但 http://sqlfiddle.com/#!18/76ca2/1 Table2 資料筆數較少的話
結果資料就會少
恩恩,所以dog830228的答案才正確,我誤解你的意思了
另外提供一個寫法
SELECT T1.*,(SELECT TOP 1 Price
FROM Table2
WHERE T1.buy_date > buy_date
ORDER BY buy_date DESC)
FROM Table1 AS T1
跟dog830228差不多意思