我有兩個表,我想加入前一個(最近的日期)填充空值。
CREATE TABLE a
( a_value int,
a_date DATE,
a_id int
);
CREATE TABLE b
( b_id int,
b_date DATE,
b_value float
);
INSERT INTO a VALUES (1, '20130603', 1);
INSERT INTO a VALUES (1, '20130704', 1);
INSERT INTO a VALUES (3, '20130805', 1);
INSERT INTO a VALUES (1, '20130906', 1);
INSERT INTO a VALUES (2, '20131007', 1);
INSERT INTO b VALUES (1, '20130603', 3.00);
INSERT INTO b VALUES (1, '20130706', 4.00);
INSERT INTO b VALUES (1, '20130906', 5.00);
我需要像這樣加入,但我在某些 a_dates 中得到空值。
SELECT a.a_value,
a.a_date,
a.a_id,
b.b_value,
b.b_date
FROM b
RIGHT JOIN a on a.a_id = b.b_id
AND b.b_date <= a.a_date
AND b.b_date >= timestampadd(day, -25, a.a_date)
ORDER BY a.a_date;
結果:
| 一個值 | 一個約會 | 援助 | b_value | b_date |
|---|---|---|---|---|
| 1個 | 2013-06-03 | 1個 | 3個 | 2013-06-03 |
| 1個 | 2013-07-04 | 1個 | (無效的) | (無效的) |
| 3個 | 2013-08-05 | 1個 | (無效的) | (無效的) |
| 1個 | 2013-09-06 | 1個 | 5個 | 2013-09-06 |
| 2個 | 2013-10-07 | 1個 | (無效的) | (無效的) |
但我想按最接近的日期填充缺失值
| 一個值 | 一個約會 | 援助 | b_value | b_date |
|---|---|---|---|---|
| 1個 | 2013-06-03 | 1個 | 3個 | 2013-06-03 |
| 1個 | 2013-07-04 | 1個 | 3個 | 2013-06-03 |
| 3個 | 2013-08-05 | 1個 | 4個 | 2013-07-06 |
| 1個 | 2013-09-06 | 1個 | 5個 | 2013-09-06 |
| 2個 | 2013-10-07 | 1個 | 5個 | 2013-09-06 |
我嘗試使用合并:
and coalesce(b.b_date,
(select b_date
from b as b1
where b1.b_date <a.a_date and b1.b_value is not null
order by b1.b_date desc
LIMIT 1)) <= a.a_date;
但是得到重復的行:(
我應該怎么做?
uj5u.com熱心網友回復:
select a_value
,a_date
,a_id
,b_id
,b_date
,b_value
from
(
select *
,rank() over(partition by a_id, a_date, a_value order by datediff(a_date, b_date)) as rnk
from a full join b
where b_date <= a_date
) ab
where rnk = 1
| 一個值 | 一個約會 | 援助 | 出價 | b_date | b_value |
|---|---|---|---|---|---|
| 1個 | 2013-06-03 | 1個 | 1個 | 2013-06-03 | 3個 |
| 1個 | 2013-07-04 | 1個 | 1個 | 2013-06-03 | 3個 |
| 3個 | 2013-08-05 | 1個 | 1個 | 2013-07-06 | 4個 |
| 1個 | 2013-09-06 | 1個 | 1個 | 2013-09-06 | 5個 |
| 2個 | 2013-10-07 | 1個 | 1個 | 2013-09-06 | 5個 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/536563.html
標籤:数据库数据库加入
上一篇:MySQLCOUNT(Joiningtable)獲取大表中的資料花費的時間太長
下一篇:加入熊貓名單
