Sql 在两个日期之间插入值

Sql 在两个日期之间插入值,sql,oracle,Sql,Oracle,我用一个查询创建了下表 m_id s_s s_e a_s_t 101 2019-12-23 13:08:49 2019-12-23 13:13:12 NS 101 2019-12-23 13:14:35 2019-12-23 13:14:56 MS 所需表格 m_id s_s s_e a_s_t 101 2019-12-23 13:08:

我用一个查询创建了下表

m_id s_s                    s_e                 a_s_t
101  2019-12-23 13:08:49  2019-12-23 13:13:12   NS
101  2019-12-23 13:14:35  2019-12-23 13:14:56   MS
所需表格

m_id s_s                    s_e                 a_s_t
101  2019-12-23 13:08:49  2019-12-23 13:13:12   NS
**101  2019-12-23 13:13:12  2019-12-23 13:14:35   UP**
101  2019-12-23 13:14:35  2019-12-23 13:14:56   MS
如何在NS和MS之间插入UP a\u s\t列

UP s_s应为前一行的s_s,UP s_e为下一行的s_s

您可以执行以下操作:

insert into t (m_id, s_s, s_e, a_s_t)
    select m_id, min(s_e), max(s_s), 'UP'
    from t
    group by m_id;
这不会在其他两行之间插入新行,因为这没有意义。SQL表表示无序集

它会插入一行,其中包含所需的值。

请尝试以下操作:

with firstq as (
    select m_id ,s_s,s_e,a_s_t, lead(s_s,1) over (partition by m_id order by s_s) next_s_s
    from table_x)
select m_id,s_s,s_e,a_s_t
from firstq
union all
select m_id, s_e,next_s_s,'UP'
from firstq
where next_s_s is not null
order by m_id, s_s

这意味着你需要填补这个空白

使用以下查询:

Insert into your_table
Select m_id, s_e, lss, 'UP' from
(Select t.*, 
        lead(s_s) over (partition by m_id order by s_s) as lss
  From your_table t)
Where s_e <> lss

干杯

谢谢你的评论。我需要上一张唱片的序列号和下一张唱片的序列号。通过您的查询,我只得到下一条记录的s_,而不是上一条记录的s_,对吗?您是否尝试过查询以查看得到的结果,以及是否符合您的要求?我得到的是字符集不匹配错误。修复了字符集不匹配问题,将“UP”转换为NVARCHAR100。我无法确定您的列是nvarchar2,否?谢谢,我会检查它。请在where语句中尝试。我无法选择LSS。我试过有t.lss和没有。为什么不呢?您可以在WHERE子句中使用它。分享你的疑问,你正在尝试抱歉,也许我的解释不清楚。我构建了自己的查询,以获得问题的结果。我不想在现有表中插入值。