如何在 SQL 中编写存储过程以填充某些时间戳中的空值
How to write a Stored Proc in SQL to fill Null values in certain timestamps
让我用简短的方式描述一下。事情是这样的
我在 MySql 中有一个 table 它有 8 列。第一列是“时间戳”,它有一些时间读数,间隔为 10 分钟(比如晚上 8 点、晚上 8 点、晚上 8 点等),用于选定的日期范围。其余列提供该特定时间戳的数据。所有这些时间戳和数据都是通过 ASP.Net 微服务生成的,并通过 IIS 托管。
好的,现在如果服务错过了某些时间间隔,则不会显示整行。
例:读到晚上8点后,直接有晚上9点的读数,也就是说我们没有8点10分、8点20点、8点30点等中间数据。
现在的问题是,我需要在 SQL 中编写一个存储过程,它可以在同一个 table 中生成所有缺失的时间戳,并且可以将其他列填充为 Null .
这里有一个table为了更好的理解:
- 我有:
Time Stamp
Data1
Data 2
So on.......
8.00pm
1234
6758
.............
8.10pm
5768
4658
.............
9.00pm
6754
8674
.............
- 我想做的事情:
Time Stamp
Data1
Data 2
8.00pm
1234
6758
8.10pm
5768
4658
8.20pm
NULL
NULL
8.30pm
NULL
NULL
8.40pm
NULL
NULL
8.50pm
NULL
NULL
9.00pm
6754
8674
任何人都可以帮助我吗?我知道你们可以。
我建议您创建一个 table,每天都有可用的时间段。
create table apts (
tslot varchar(10),
Data1 int, Data2 int);
insert into apts values
('08:00', 1234, 6758),
('08:10', 5768, 4658),
('09:00', 6754, 8674);
✓
3 行受影响
create table slots( tim varchar(10));
insert into slots values
('08:00'),('08:10'),('08:20'),
('08:30'),('08:40'),('08:50'),
('09:00');
✓
7 行受影响
select tim slot,data1,data2
from apts
right join slots on tslot = tim;
slot | data1 | data2
:---- | ----: | ----:
08:00 | 1234 | 6758
08:10 | 5768 | 4658
08:20 | null | null
08:30 | null | null
08:40 | null | null
08:50 | null | null
09:00 | 6754 | 8674
db<>fiddle here
让我用简短的方式描述一下。事情是这样的 我在 MySql 中有一个 table 它有 8 列。第一列是“时间戳”,它有一些时间读数,间隔为 10 分钟(比如晚上 8 点、晚上 8 点、晚上 8 点等),用于选定的日期范围。其余列提供该特定时间戳的数据。所有这些时间戳和数据都是通过 ASP.Net 微服务生成的,并通过 IIS 托管。
好的,现在如果服务错过了某些时间间隔,则不会显示整行。
例:读到晚上8点后,直接有晚上9点的读数,也就是说我们没有8点10分、8点20点、8点30点等中间数据。
现在的问题是,我需要在 SQL 中编写一个存储过程,它可以在同一个 table 中生成所有缺失的时间戳,并且可以将其他列填充为 Null .
这里有一个table为了更好的理解:
- 我有:
Time Stamp | Data1 | Data 2 | So on....... |
---|---|---|---|
8.00pm | 1234 | 6758 | ............. |
8.10pm | 5768 | 4658 | ............. |
9.00pm | 6754 | 8674 | ............. |
- 我想做的事情:
Time Stamp | Data1 | Data 2 |
---|---|---|
8.00pm | 1234 | 6758 |
8.10pm | 5768 | 4658 |
8.20pm | NULL | NULL |
8.30pm | NULL | NULL |
8.40pm | NULL | NULL |
8.50pm | NULL | NULL |
9.00pm | 6754 | 8674 |
任何人都可以帮助我吗?我知道你们可以。
我建议您创建一个 table,每天都有可用的时间段。
create table apts ( tslot varchar(10), Data1 int, Data2 int); insert into apts values ('08:00', 1234, 6758), ('08:10', 5768, 4658), ('09:00', 6754, 8674);
✓
3 行受影响
create table slots( tim varchar(10)); insert into slots values ('08:00'),('08:10'),('08:20'), ('08:30'),('08:40'),('08:50'), ('09:00');
✓
7 行受影响
select tim slot,data1,data2 from apts right join slots on tslot = tim;
slot | data1 | data2 :---- | ----: | ----: 08:00 | 1234 | 6758 08:10 | 5768 | 4658 08:20 | null | null 08:30 | null | null 08:40 | null | null 08:50 | null | null 09:00 | 6754 | 8674
db<>fiddle here