Mysql刷题笔记 12.31 如果某列的字段在该日期为空值,查询时结果显示为之前最接近日期的非空值

Mysql刷题笔记

-- 12.31 如果某列的字段在该日期为空值,查询时结果显示为之前最接近日期的非空值。 

CREATE TABLE T1231
(
	LDate DATE NOT NULL, 
	Value1 INT NULL, 
	Value2 INT NULL
);
INSERT INTO T1231 VALUES('2020-11-25', 500 ,200);
INSERT INTO T1231 VALUES('2020-11-24', Null, 200);
INSERT INTO T1231 VALUES('2020-11-23', Null, 250);
INSERT INTO T1231 VALUES('2020-11-22', 300 ,Null);
INSERT INTO T1231 VALUES('2020-11-21', 200 ,320);

T1231
+------------+--------+--------+
| LDate      | Value1 | Value2 |
+------------+--------+--------+
| 2020-11-25 |    500 |    200 |
| 2020-11-24 |   NULL |    200 |
| 2020-11-23 |   NULL |    250 |
| 2020-11-22 |    300 |   NULL |
| 2020-11-21 |    200 |    320 |
+------------+--------+--------+

结果
+------------+--------+--------+
| LDate      | VALUE1 | VALUE2 |
+------------+--------+--------+
| 2020-11-25 |    500 |    200 |
| 2020-11-24 |    300 |    200 |
| 2020-11-23 |    300 |    250 |
| 2020-11-22 |    300 |    320 |
| 2020-11-21 |    200 |    320 |
+------------+--------+--------+


SELECT A.LDate,
(
  SELECT B.Value1 FROM T1231 B 
  WHERE B.LDate <= A.LDate AND B.Value1 IS NOT NULL 
  ORDER BY A.LDate ASC LIMIT 1
) AS VALUE1,
(
  SELECT B.Value2 FROM T1231 B 
  WHERE B.LDate <= A.LDate AND B.Value2 IS NOT NULL 
  ORDER BY A.LDate ASC LIMIT 1
) AS VALUE2
FROM T1231 A
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值