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
    评论
我可以帮您解决关于Python的问题,但是您提出的问题涉及到数据处理和可视化,需要使用Python的相关库进行实现。以下是您提出的问题的解答: (1)读取 PRSA_ data 2010.1.1-2014.12.31.csx 文件并查看前3行、后2行代码: ```python import pandas as pd data = pd.read_csv('PRSA_data_2010.1.1-2014.12.31.csv') print(data.head(3)) # 查看前3行 print(data.tail(2)) # 查看后2行 ``` (2)删除列 DEWP、TEMP、PRES、cbwd、Iws、Is、Ir,并将剩余列用 pandas 数据预处理模块将缺失丢弃处理,并导出到新的 csv 文件 pm25_ data 2010.1.1-2014.12.31.csv。 ```python data = data.drop(columns=['DEWP', 'TEMP', 'PRES', 'cbwd', 'Iws', 'Is', 'Ir']) data = data.dropna() # 删除缺失 data.to_csv('pm25_data_2010.1.1-2014.12.31.csv', index=False) # 导出为新的 csv 文件 ``` (3)选择字段 pm2.5 大于300的所有数据集,导出为文本文件 pm25_hazardous_data_2010.1.1-2014.12.31.txt。 ```python hazardous_data = data[data['pm2.5'] > 300] hazardous_data.to_csv('pm25_hazardous_data_2010.1.1-2014.12.31.txt', sep=',', index=False, header=False, line_terminator='\n') ``` (4)将文本文件 pm25_hazardous_data_2010.1.1-2014.12.31.txt 转存到 Excel 文件 pm25_hazardous_data_2010.1.1-2014.12.31.xlsx。 ```python hazardous_data = pd.read_csv('pm25_hazardous_data_2010.1.1-2014.12.31.txt', header=None) hazardous_data.to_excel('pm25_hazardous_data_2010.1.1-2014.12.31.xlsx', index=False, header=False) ``` (5)重新读取文本文件 pm25_hazardous_data_2010.1.1-2014.12.31.txt,分别统计出现最多的 month、day、hour,并将 month、day、hour 的出现频次用柱状图显示,并将结果保存为 png 图片保存,分辨率为 400 dpi,png 图片命名分别为 pm25_hazardous_month_day_hour.png。 ```python import matplotlib.pyplot as plt hazardous_data = pd.read_csv('pm25_hazardous_data_2010.1.1-2014.12.31.txt', header=None, names=['year', 'month', 'day', 'hour', 'pm2.5']) month_count = hazardous_data['month'].value_counts() day_count = hazardous_data['day'].value_counts() hour_count = hazardous_data['hour'].value_counts() fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(15, 5)) month_count.plot(kind='bar', ax=ax1, color='r') ax1.set_xlabel('Month') ax1.set_ylabel('Frequency') ax1.set_title('PM2.5 Hazardous Month Count') ax1.set_xticklabels(month_count.index, rotation=0) day_count.plot(kind='bar', ax=ax2, color='g') ax2.set_xlabel('Day') ax2.set_ylabel('Frequency') ax2.set_title('PM2.5 Hazardous Day Count') ax2.set_xticklabels(day_count.index, rotation=0) hour_count.plot(kind='bar', ax=ax3, color='b') ax3.set_xlabel('Hour') ax3.set_ylabel('Frequency') ax3.set_title('PM2.5 Hazardous Hour Count') ax3.set_xticklabels(hour_count.index, rotation=0) plt.savefig('pm25_hazardous_month_day_hour.png', dpi=400) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值