【问题标题】:Find new dates for list of deals查找交易列表的新日期
【发布时间】:2020-04-25 20:55:35
【问题描述】:

我想在日历中查找不包含在交易+日期列的表格中的日期。 代码中具有预期结果的示例 (T-SQL)。谢谢你的建议

create table #deals
(id int ,
dates date);

create table #calendar 
(dates date );

create table #result
(id int ,
dates date);

-----calendar table (tbl#1)
insert into #calendar values ('2020-04-19');
insert into #calendar values ('2020-04-20');
insert into #calendar values ('2020-04-21');
-----deals table (tbl#2)
insert into #deals values ('111', '2020-04-19');
insert into #deals values ('111', '2020-04-20');
insert into #deals values ('222', '2020-04-18');
----expected result table 
insert into #result values ('111', '2020-04-21');
insert into #result values ('222', '2020-04-19');
insert into #result values ('222', '2020-04-20');
insert into #result values ('222', '2020-04-21');

select * from #calendar; 
select * from #deals;
select * from #result

【问题讨论】:

    标签: sql exists


    【解决方案1】:

    生成交易和日期的所有组合,然后删除存在的组合:

    select d.id, c.date
    from (select distinct id from #deals) d cross join
         #calendar c left join
         #deals dd
         on dd.id = d.id and dd.date = c.date
    where dd.id is null;
    

    【讨论】:

    • 谢谢,太好了。但是我觉得,这种方法不是最有效的吗?!
    • @SergeyFido 。 . .如果您有替代方案,可以将它们进行比较。我想不出另一种明显的方法来做你想做的事——除了在这方面的细微变化,比如使用existsexcept(如果你的数据库支持的话)。
    猜你喜欢
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多