Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 使用基于时间间隔的分组进行数据清理-sql2005_Sql Server 2005_Grouping_Aggregate_With Statement - Fatal编程技术网

Sql server 2005 使用基于时间间隔的分组进行数据清理-sql2005

Sql server 2005 使用基于时间间隔的分组进行数据清理-sql2005,sql-server-2005,grouping,aggregate,with-statement,Sql Server 2005,Grouping,Aggregate,With Statement,我希望在不必删除任何行的情况下报告表中的以下数据 ActiveSearchID---SearchDate-------------------SearchPhase 1------------------2010-12-15 12:01:11.587---argos 2------------------2010-12-15 12:03:40.193---无印良品 3------------------------------------------2010-12-15 12:03:42.370

我希望在不必删除任何行的情况下报告表中的以下数据

ActiveSearchID---SearchDate-------------------SearchPhase
1------------------2010-12-15 12:01:11.587---argos
2------------------2010-12-15 12:03:40.193---无印良品
3------------------------------------------2010-12-15 12:03:42.370---无印良品
4------------------2010-12-15 12:04:29.167--办公用品
5------------------2010-12-15 12:05:11.590---熔岩
9-----------------2010-12-15 12:08:38.920----索尼vaio
10-----------------2010-12-15 12:08:41.170----索尼vaio
12-----------------2010-12-15 12:09:09.920-------索尼vaio电池
13-----------------2010-12-15 12:09:17.487--索尼vaio电池
14------------------2010-12-15 12:17:10.980--索尼vaio电池
15-----------------2010-12-15 12:17:12.170---argos

我试图获取的报告是选择在5分钟间隔内搜索过的SearchPhase的第一个实例。 因此,例如,上述信息的查询no将导致以下结果:
搜索日期-----------------搜索短语
2010-12-15 12:01:11.587---argos
2010-12-15 12:03:40.193--无印良品
2010-12-15 12:04:29.167--办公用品
2010-12-15 12:05:11.590---熔岩 2010-12-15 12:08:38.920--索尼vaio
2010-12-15 12:09:09.920--索尼vaio电池
2010-12-15 12:17:12.170---argos


我尝试了以下查询,但仍然得到重复的查询:

选择t1.searchdate,t1.searchPhase 从ActiveSearchs t1 内部联接活动在t1上搜索t2.SearchPhase=t2.SearchPhase 和t1.searchdate其中datediff(s,t1.searchdate,t2.searchdate)我相信根据您的测试数据,“索尼vaio电池”应该被退回两次。我想出了两个选择

-- Populate test data
if(OBJECT_ID('tempdb..#Search') IS NOT NULL)
    DROP TABLE #Search
create table #Search (
    ActiveSearchID int primary key, 
    SearchDate datetime not null, 
    SearchPhrase nvarchar(30))

insert into #Search(ActiveSearchID, SearchDate, SearchPhrase)
select 1, '2010-12-15 12:01:11.587', 'argos'
union all select 2, '2010-12-15 12:03:40.193', 'muji'
union all select 3, '2010-12-15 12:03:42.370', 'muji'
union all select 4, '2010-12-15 12:04:29.167', 'Office supplies'
union all select 5, '2010-12-15 12:05:11.590', 'lava'
union all select 9, '2010-12-15 12:08:38.920', 'sony vaio'
union all select 10, '2010-12-15 12:08:41.170', 'sony vaio'
union all select 12, '2010-12-15 12:09:09.920', 'sony vaio battery'
union all select 13, '2010-12-15 12:09:17.487', 'sony vaio battery'
union all select 14, '2010-12-15 12:17:10.980', 'sony vaio battery'
union all select 15, '2010-12-15 12:17:12.170', 'argos'
我想你正在寻找类似这样的问题。不过,我不确定这将如何执行:

select * 
from #Search as S
where not exists(
select * from #Search as N
where N.SearchPhrase= S.SearchPhrase
and N.SearchDate between 
    dateadd(minute, -5, S.SearchDate) AND S.SearchDate
and N.ActiveSearchID <> S.ActiveSearchID)

是否可以将“5分钟间隔内”定义为严格的日期时间间隔,如1:00-1:05、1:05-1:10、1:10-1:15?
select
    ActiveSearchID, SearchDate, SearchPhrase
from
(
    select 
        *,
        ROW_NUMBER() over (
                partition by SearchPhrase,  
                             DATEDIFF(minute, '2000-01-01', SearchDate) / 5
            order by SearchDate, ActiveSearchID) as rn,
        DATEDIFF(minute, '2000-01-01', SearchDate) as five_minute_window 
    from #Search
) as X
where
    rn = 1
order by
    ActiveSearchID