我有一个表格,其中包含这样的不同报告日期的全球销售数据:
+------------+------+------------+---------+
| Closed | Open | Plan | Station |
+------------+------+------------+---------+
| 2018-10-23 | NULL | NULL | A |
| 2018-10-22 | NULL | NULL | NULL |
| 2018-10-22 | NULL | NULL | B |
| 2018-10-22 | NULL | NULL | NULL |
| NULL | NULL | 2018-10-23 | C |
| NULL | NULL | 2018-10-22 | NULL |
| NULL | NULL | 2018-10-22 | NULL |
+------------+------+------------+---------+
CREATE TABLE Orders
(Closed DATE,
Open DATE,
Plan DATE,
Station Char);
insert into Orders values ("2018-10-23",NULL,NULL, "A");
insert into Orders values ("2018-10-22",NULL,NULL, NULL);
insert into Orders values ("2018-10-22",NULL,NULL, "B");
insert into Orders values ("2018-10-22",NULL,NULL, NULL);
insert into Orders values (NULL,NULL,"2018-10-23", "C");
insert into Orders values (NULL,NULL,"2018-10-22", NULL);
insert into Orders values (NULL,NULL,"2018-10-22", NULL);
我想用最新的已知值填充“桩号”,以获得以下所需的结果。
+------------+------+------------+---------+
| Closed | Open | Plan | Station |
+------------+------+------------+---------+
| 2018-10-23 | NULL | NULL | A |
| 2018-10-22 | NULL | NULL | A |
| 2018-10-22 | NULL | NULL | B |
| 2018-10-22 | NULL | NULL | B |
| NULL | NULL | 2018-10-23 | C |
| NULL | NULL | 2018-10-22 | C |
| NULL | NULL | 2018-10-22 | C |
+------------+------+------------+---------+
答案 0 :(得分:1)
假设您的表中有一个主键列(例如id
),该列可用于定义Station
的“最新已知”值。 请记住:数据是以无序方式存储的,并且没有定义特定的顺序和/或主键,我们无法真正定义“最新已知”值。
Coalesce()
函数将用于处理特定行中null
的{{1}}值。然后,我们可以使用Correlated Subquery来确定“最新已知”值。
Station
结果
SELECT
t1.Closed,
t1.Open,
t1.Plan,
COALESCE(t1.Station,
(SELECT t2.Station
FROM Orders AS t2
WHERE t2.id < t1.id
AND t2.Station IS NOT NULL
ORDER BY t2.id DESC
LIMIT 1)) AS Station
FROM Orders AS t1