我有2張桌子
表A
| ... | 開始時間 | 時間結束 |
|---|---|---|
| ... | 2021.01.01 7:15:00 | 2021.01.01 9:30:00 |
表B
| ... | 開始時間 | 時間結束 |
|---|---|---|
| ... | 2021.01.01 6:10:00 | 2021.01.01 6:30:00 |
| ... | 2021.01.01 7:00:00 | 2021.01.01 7:32:00 |
| ... | 2021.01.01 7:45:00 | 2021.01.01 9:15:00 |
從表 A 開始,我想根據表 B 中的時間拆分資料。表 B 中的時間是要使用的正確時間間隔。
我的意思的一個例子結果應該是:
| ... | 開始時間 | 時間結束 |
|---|---|---|
| ... | 2021.01.01 7:15:00(來自A) | 2021.01.01 7:32:00(來自B) |
| ... | 2021.01.01 7:45:00(來自B) | 2021.01.01 9:15:00(來自B) |
create table #A (
StartTime datetime
, EndTime datetime
);
create table #B (
StartTime datetime
, EndTime datetime
);
insert into #A
select {ts'2021-01-01 07:15:00'}, {ts'2021-01-01 09:30:00'}
insert into #B
select {ts'2021-01-01 06:10:00'}, {ts'2021-01-01 06:30:00'}
insert into #B
select {ts'2021-01-01 07:00:00'}, {ts'2021-01-01 07:32:00'}
insert into #B
select {ts'2021-01-01 07:45:00'}, {ts'2021-01-01 09:15:00'}
Drop Table #A, #B
uj5u.com熱心網友回復:
首先,加入B與A其中兩個范圍重疊(即,一個范圍的一些部分重疊的其他范圍的某些部分)。找到重疊的行后B,如有必要,請限制 的開始和結束日期:
SELECT
CASE WHEN a.StartTime > b.StartTime THEN a.StartTime ELSE b.StartTime END AS s,
CASE WHEN a.EndTime < b.EndTime THEN a.EndTime ELSE b.EndTime END AS e
FROM b
JOIN a ON a.EndTime > b.StartTime AND b.EndTime > a.StartTime
資料庫<>小提琴
uj5u.com熱心網友回復:
我會在包括 B 的 A 上加入內部,然后使用 row_number 進行排序:
select
A.StartTime as OriginalStartTime
,A.EndTime as OriginalStartTime
,row_number() over (order by B.StartTime) as portion
,B.StartTime as PortionStartTime
,B.EndTime as PortionEndTime
from
TableA as as
inner join TableB as B on B.StartTime>=A.StartTime and B.EndTime<=A.EndTime
order by 3 asc
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/353034.html
標籤:sql sql-server 查询语句
上一篇:雙子串
