Py学习  »  DATABASE

mysql 5.5-用上面的值填补空白

Kalenji • 4 年前 • 686 次点击  

我有一个表,其中包含不同报告日期的全球销售数据,如下所示:

+------------+------+------------+---------+
| 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);

我想用最后一个已知值填充station列,以得到下面所需的结果。

+------------+------+------------+---------+
| 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       |
+------------+------+------------+---------+
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/41163
 
686 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Madhur Bhaiya
Reply   •   1 楼
Madhur Bhaiya    5 年前

假设有一个主键列(假设 id )在您的表中,它可用于定义 Station 记得 这些数据以无序的方式存储,如果不定义特定的顺序和/或主键,我们就不能真正定义“last known”值。

Coalesce() 函数将用于处理 null 价值观 车站 在特定的一排。那么,我们可以用 Correlated Subquery 以确定“最后已知”的值。

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

结果

| Closed     | Open | Plan       | Station |
| ---------- | ---- | ---------- | ------- |
| 2018-10-23 |      |            | A       |
| 2018-10-22 |      |            | A       |
| 2018-10-22 |      |            | B       |
| 2018-10-22 |      |            | B       |
|            |      | 2018-10-23 | C       |
|            |      | 2018-10-22 | C       |
|            |      | 2018-10-22 | C       |

View on DB Fiddle