一个表 表名IpLog 字段:ID | NAME | IP | DATEANDTIME 想得到的查询结果是 同一个IP 在一分钟内 访问 相同 NAME 超过60 次的 IP NAME 可重复 IP 可重复 DATEANDTIME 为GETDATE() ID 自增 但可以不考虑. 不知道用group by 该怎么写:(
上面的错了
declare cursor_insert cursor for select distinct DATEANDTIME from iplog
declare @@i datetime
open cursor_insert
fetch cursor_insert into @@i
while @@fetch_status=0
begin
fetch cursor_insert into @@i
select ip,name from iplog where DATEDIFF(second, DATEANDTIME,@@i)<1 group by ip,name having count(*)>60
end
close cursor_insert
deallocate cursor_insert
SELECT DISTINCT Ip
FROM (SELECT B.name, B.Ip, A.datetime, COUNT(B.Id) AS num
FROM IPLog A INNER JOIN
IPLog B ON A.Id <> B.Id AND A.name = B.name AND A.Ip = B.Ip AND
DATEDIFF(S, A.datetime, B.datetime) < 60 AND
A.datetime < B.datetime
GROUP BY B.Ip, B.name, A.datetime) c
WHERE (num >60)
select A.ip, A.[Name] from
(select [Name],ip
from IpLog
where abs(datediff(mi,getdate(),DATEANDTIME))=1 or abs(datediff(mi,DATEANDTIME,getdate()))=1) A
group by A.ip, A.[Name] having count(*)>60
vbs:
要不你select distinct DATEANDTIME from iplog:找出所有不同的登陆时间
让后循环查询
do while not rsdistinct.eof
select ip,name,count(*) as ipcount from iplog where DATEDIFF(second, DATEANDTIME,上面的DATEANDTIME)<1 group by ip,name having count(*)>60
response.write "ip地址:" & rsdistinct(ip) & ",姓名:" & rsdistinct(name) & ",登陆次数:" & & rsdistinct(ipcount)
rsdistinct.movenext
loop
oracle:
select to_char(DATEANDTIME,'yyyymmddhh24mi'), ip,name,count(*) from iplog group by to_char(DATEANDTIME,'yyyymmddhh24mi'),ip,name
having count(*)>60
sqlserver中把to_char用convert函数改写就可以了,参数参考帮助,。