我想將缺少的月份添加到表格中。如果當前行缺少月份,則應檢查前一行和該行中的月份名稱,并在當前行中添加下個月。例如:當前月份為空,則應檢查前一行的月份名稱,如果前一行是一月,則當前月份應將空替換為二月,例如。如果當前月份為空,則應檢查前一行中的月份名稱為 8 月,然后將下一個空月份名稱替換為 9 月。
創建表的代碼:
CREATE TABLE IF NOT EXISTS missing_months (
`Cust_id` INT,
`Month` VARCHAR(9) CHARACTER SET utf8,
`Sales_value` INT
);
INSERT INTO missing_months VALUES
(1,'Janurary',224),
(2,'February',224),
(3,NULL,239),
(4,'April',205),
(5,NULL,218),
(6,'June',201),
(7,NULL,205),
(8,'August',246),
(9,NULL,218),
(10,NULL,211),
(11,'November',223),
(12,'December',211);
輸出是:
Cust_id Month Sales_value
1 Janurary 224
2 February 224
3 null 239
4 April 205
5 null 218
6 June 201
7 null 205
8 August 246
9 null 218
10 null 211
11 November 223
12 December 211
但我想要這樣的輸出:
Cust_id Month Sales_value
1 Janurary 224
2 Febrauary 224
3 March 239
4 April 205
5 May 218
6 June 201
7 July 205
8 August 246
9 September 218
10 October 211
11 November 223
12 December 211
uj5u.com熱心網友回復:
update missing_months m
join missing_months prev on prev.Cust_id=m.Cust_id-1
set m.Month=date_format(str_to_date(concat(prev.Month,'-1970-01'),'%M-%Y-%d') interval 1 month,'%M')
where m.Month is null
order by m.Cust_id
但是依賴標識??符欄位來排序是不好的;如果您的資料是有序的,您應該有一些其他列指示訂單是什么。
uj5u.com熱心網友回復:
select Cust_id, monthname(STR_TO_DATE(rn, '%m')) as Month_Name,
Sales_value
from
(Select Cust_id, Month, row_number() over() as rn,
Sales_value
from missing_month) x;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353224.html
上一篇:如何撰寫一個查詢,在sql中連接同一個表并將一個表的列值與另一個表中的相同列進行比較
下一篇:選擇特定欄位并將它們寫入新檔案
