如何找出数据库中缺少的日期!

「已注销」 2004-11-09 01:41:32
ACCESS数据库,里面有一个字段date,日期类型,是存放添加此条数据时当天的日期的!

现在有一个问题!

怎么样找出哪天没有登陆数据!

比如从2002-06-01 至 2004-11-1 ,在这个期间哪天没有输入过数据!

数据量很大,大约8000多条了!什么样的算法更好一些呢?

谢谢!
...全文
334 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
alern_zyb 2004-11-09
  • 打赏
  • 举报
回复
sql="select DISTINCT date from table where 日期字段>=#2002-06-01 # and 日期字段<=#2004-11-1#" order by date 选出这期间所有的数据按日期排序
rs.open sql,conn,1,1
str=""
str1="2004-6-1" 开始日期
do while not rs.eof
num=datediff("d",'"&str1&"','"&rs(date)&"')'得出日期差
if num>0 then
for i=1 to num
str=str&(str1)&"@"
next
end if
str1=rs(date)
rs.movenext
loop

然后再分割
kelly_1127 2004-11-09
  • 打赏
  • 举报
回复
看看
若白师妹 2004-11-09
  • 打赏
  • 举报
回复
如果你确定是哪天的话那更简单了
sql="select * from table where 日期字段=#2004-1-3#"
if not rs.eof then
response.write "有数据"
else
response.write "无数据"
end if
earthpea 2004-11-09
  • 打赏
  • 举报
回复
我认为ghostzp总体的思路不错,但还要注意一点,就是说他的记录中有多条日期相同的,应该使用DISTINCT来取唯一值,即每一个语句改为:
sql="select distinct 日期字段 from table where 日期字段>=#2002-06-01# and 日期字段<=#2004-11-1#"
应该有可以了
楼主说只有八千多条记录的话,应该是几秒钟就搞定了。
「已注销」 2004-11-09
  • 打赏
  • 举报
回复
这是一个空气指数的程序,我要找出曾经哪天没有报过数据,而且有很多城市,在同一天中可能会有date字段内的内容重复,如果比较相临两个字段之间的差距的话,是没有办法完成的!

比如:

ID DATE CITY NUMBER

100 2004-1-1 北京 157
101 2004-1-1 上海 65
102 2004-1-1 重庆 98
103 2004-1-2 北京 124
104 2004-1-2 上海 77
105 2004-1-2 重庆 62
106 2004-1-4 北京 114
107 2004-1-4 上海 79
108 2004-1-4 重庆 85

我要找出的内容是在2004-1-3这个日期没有报过数据!

谢谢!
若白师妹 2004-11-09
  • 打赏
  • 举报
回复
不知道是否符合楼主的意思?要注意日期的格式统一
若白师妹 2004-11-09
  • 打赏
  • 举报
回复
sql="select * from table where 日期字段>=#2002-06-01 # and 日期字段<=#2004-11-1#" 选出这期间所有的数据
rs.open sql,conn,1,1
str=""
do while not rs.eof
str=str&rs("日期字段")&"," '把所有得日期字段串成一个字串,你要确定你的日期格式统一
rs.movenext
loop
num=datediff("d","2004-6-1","2004-11-1")'得出日期差
for i=1 to num
tmp=dateadd("d",i,"2004-6-1")
if instr(str,tmp)<0 then '不存在这个日期
response.write tmp &"<br>"
end if
next
Yansharp 2004-11-09
  • 打赏
  • 举报
回复
使用日期做循环,如果没有该日期的数据,则没有登陆
nethawkc 2004-11-09
  • 打赏
  • 举报
回复
select * from [tablename]
where [date字段] between ‘2002-06-01 00:00:00’ and ‘2004-11-1 23:59:59’
and ([date字段] is null or [date字段]=’’)
micher_yan 2004-11-09
  • 打赏
  • 举报
回复
只能用循环,假设数据库中有个最简单的字段如id,用count(id)可以减少返回的数据,
k=datediff("d",cdate("2002-6-1 00:00:00"),cdate("2004-11-1 00:00:00"))
d=cdate("2002-6-1 00:00:00")
for i=0 to k-1
sql="select count(id) from table where [date] between '"&d&"' and '"&d+1&"'"
rs.open sql,conn,3,1
if rs(0)=0 then
response.write d&"没有数据"
end if
d:= d+1
next
newskyline 2004-11-09
  • 打赏
  • 举报
回复
这是一个有趣的话题。我的想法:
先用一个DISTINCT把一个时间段中的所有日期筛选出来并按先后排序,然后按照所有日期进行循环比较,将没有出现的日期做上标记或者筛选到一个数组。算法的时间复杂度应该不会超过O(n)。

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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