sql 查询缺少的数据,怎么个查法请指教
表ABC
字段:
id time anli
1 2013/1/29 14:20:00 10
2 2013/1/29 14:25:00 40
3 2013/1/29 14:30:00 15
4 2013/1/29 14:35:00 10
5 2013/1/29 14:45:00 11
6 2013/1/29 15:05:00 36
现在的情况是anli的值是5分钟一个数据自动入库的,但是他中间有的时候会丢失数据,比如第4条到第5条之间缺一条2013/1/29 14:40:00的数据 第5条到第6条间缺3条数据,现在用SQL查出这里缺的数据并显示缺数的时间,请高手帮忙,我是VB弄的小程序来查的,但是弄到这里就不懂了
[解决办法]
'首先查询到最大和最小值
Dim dt As Date
Set rs = cn.Execute("SELECT Min([time]) As mintime, Max([time]) As maxtime FROM ABC")
'然后循环查询
For dt = rs!mintime To rs!maxtime Stemp CDate("00:05:00")
Set rs = cn.Execute("SELECT * FROM ABC WHERE [time] = #" & Format(dt, "yyyy-mm-dd HH:nn:ss") & "#")
If rs.EOF Then Debug.Print Format(dt, "yyyy-mm-dd HH:nn:ss")
Next dt
-- 直接用 SQL 查询缺失的时间段
-- 找不存在大5分钟记录的时间 A,A + 5分钟 即为缺失时间段的开始
-- 找大于 A 的最小时间 B,B - 5分钟 即为缺失时间段的结束
-- 下面是 SQL Server 的,其他数据库自己转换
SELECT DateAdd(minute, 5, [time]) begin_time,
(SELECT DateAdd(minute, -5, MIN([time]))
FROM TABLE1 T2
WHERE T2.[time] > T1.[time]) end_time
FROM TABLE1 T1
WHERE NOT EXISTS (SELECT *
FROM TABLE1 T3
WHERE T3.[time] = DateAdd(minute, 5, T1.[time]))
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim dt As Date
...
Set rs = cn.Execute("...") '上面的 SQL
While Not rs.EOF
If Not IsNull(rs!end_time) Then '排除最后一个段落
For dt = CDate(rs!begin_time) To CDate(rs!end_time) Step CDate("00:05:00")
Debug.Print dt
Next
End If
rs.MoveNext
Wend