帮忙用什么SQL语句得到这样的结果

heton 2003-10-09 10:45:44
假设一个简单的数据表A,有这么一个字段AttTime 类型为datetime,有这些记录
2003-10-01
2003-10-02
2003-10-03

我想能否通过一条简单的sql语句得到我想要的结果,比如找出数据表A 2003-10-1 到2003-10-05
不存在的日期,通过查询我得到这样的结果
2003-10-04
2003-10-05

上面两条记录表示数据表A中没有这两个日期记录,我想到两个办法,但觉得不好,
一个是,创建一个临时表,分别插入2003-10-01到2003-10-05的记录,通过联合查询就行,
另外一个是,将表A中相关记录全部读出,然后异常跟2003-10-01到2003-10-05日期比较,这样也可以得到
结果

两种方法我都觉得效率不高,好资源,以为要比较的数据量可能比较大,这样一定会影响速度。


各位有没有什么好的办法?
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-10-10
  • 打赏
  • 举报
回复
测试:
create table test(dt datetime)
insert test values('2003-10-01')
insert test values('2003-10-02')
insert test values('2003-10-03')

Select dateadd(day,id,'2003-10-01') from
(Select top 5 (select sum(1) from sysobjects where id<= a.id)-1 as id from sysobjects a) aa
where dateadd(day,id,'2003-10-01') not in (Select dt from test)



------------------------------------------------------
2003-10-04 00:00:00.000
2003-10-05 00:00:00.000

(所影响的行数为 2 行)

txlicenhe 2003-10-10
  • 打赏
  • 举报
回复
如下即可:
Select dateadd(day,id,'2003-10-01') from
(Select top 5 (select sum(1) from sysobjects where id<= a.id)-1 as id from sysobjects a) aa
where dateadd(day,id,'2003-10-01') not in (Select 日期 from 数据表A)
txlicenhe 2003-10-10
  • 打赏
  • 举报
回复
如下即可:
Select dateadd(day,id,'2003-10-01') from
(Select top 5 (select sum(1) from sysobjects where id<= a.id) as id from sysobjects a) aa
where dateadd(day,id,'2003-10-01') not in (Select 日期 from 数据表A)
saucer 2003-10-10
  • 打赏
  • 举报
回复
try to create a temporary table, use a server side cursor, insert the missing dates into the temporary table
rainstormmaster 2003-10-10
  • 打赏
  • 举报
回复
up

好象没有什么好的办法

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧