Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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 解决方案的类型。我知道它可以很好地工作,但新的开发人员或承包商需要对系统有更多的了解才能开始使用您的系统,这会降低代码库中的可维护性。有很多更好、更容易理解和维护的方法来执行相同的任务。最重要的是,为了收集相同的数据,您仍然需要构建与实现此新方法相同的基本_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

Sql 解决方案的类型。我知道它可以很好地工作,但新的开发人员或承包商需要对系统有更多的了解才能开始使用您的系统,这会降低代码库中的可维护性。有很多更好、更容易理解和维护的方法来执行相同的任务。最重要的是,为了收集相同的数据,您仍然需要构建与实现此新方法相同的基本

Sql 解决方案的类型。我知道它可以很好地工作,但新的开发人员或承包商需要对系统有更多的了解才能开始使用您的系统,这会降低代码库中的可维护性。有很多更好、更容易理解和维护的方法来执行相同的任务。最重要的是,为了收集相同的数据,您仍然需要构建与实现此新方法相同的基本,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,解决方案的类型。我知道它可以很好地工作,但新的开发人员或承包商需要对系统有更多的了解才能开始使用您的系统,这会降低代码库中的可维护性。有很多更好、更容易理解和维护的方法来执行相同的任务。最重要的是,为了收集相同的数据,您仍然需要构建与实现此新方法相同的基本查询复杂性。您只是在更改比较类型。@Michael-我对@OMG Ponies answer中的简单不存在解决方案打了折扣,因为它附带了注释,但我现在测试了它,发现它比我的好,因为它在temp1上节省了扫描时间!。。。另外,通过将JOIN更改为


解决方案的类型。我知道它可以很好地工作,但新的开发人员或承包商需要对系统有更多的了解才能开始使用您的系统,这会降低代码库中的可维护性。有很多更好、更容易理解和维护的方法来执行相同的任务。最重要的是,为了收集相同的数据,您仍然需要构建与实现此新方法相同的基本查询复杂性。您只是在更改比较类型。@Michael-我对@OMG Ponies answer中的简单
不存在
解决方案打了折扣,因为它附带了注释,但我现在测试了它,发现它比我的好,因为它在
temp1上节省了扫描时间
!。。。另外,通过将
JOIN
更改为
LEFT JOIN temp2 t2 ON t2.value,介于DATEADD(MINUTE,-1,t1.value)和DATEADD(MINUTE,1,t1.value)
之间,可以大大改进原始查询。尽管它仍然被其他人打败。
create table temp1
(
    id int identity primary key,
    value datetime not null 
)
GO

create index ix_temp1 on temp1(value, id);
GO

set nocount on
insert temp1 (value) values (DATEADD(second, rand() * 1000000, '20100101'))
GO 15000
create table temp2
(
    id int identity primary key,
    value datetime not null 
)
GO

create index ix_temp2 on temp2(value, id);
GO

set nocount on
insert temp2 (value) values (DATEADD(second, rand() * 1000000, '20100101'))
GO 15000
SELECT t1.id, t1.value
FROM temp1 t1
LEFT JOIN temp2 t2
    ON t1.value between DATEADD(MINUTE, -1, t2.value) and DATEADD(MINUTE, 1, t2.value)
WHERE t2.value is null
SELECT t1.id,
       t1.value
  FROM temp1 t1
 WHERE NOT EXISTS(SELECT NULL
                    FROM temp2 t2
                   WHERE t2.value BETWEEN DATEADD(MINUTE, -1, t1.value)  
                                      AND DATEADD(MINUTE, 1, t1.value))
SELECT t.id,
       t.value
FROM 
(
   SELECT t1.id, 
          t1.value, 
          (SELECT MIN(temp2.value) FROM temp2 WHERE temp2.value >= t1.value) as theNext, 
          (SELECT MAX(temp2.value) FROM temp2 WHERE temp2.value <= t1.value) as thePrev
   FROM temp1 t1
) t 
WHERE DATEDIFF(second, t.value, t.theNext) > 60 
  AND DATEDIFF(second, t.thePrev, t.value) > 60
LEFT JOIN temp2 t2
 ON t1.value BETWEEN DATEADD(MINUTE, -1, t2.value) AND DATEADD(MINUTE, 1, t2.value)
LEFT JOIN temp2 t2
 ON t2.value BETWEEN DATEADD(MINUTE, -1, t1.value) AND DATEADD(MINUTE, 1, t1.value)
create table temp2
(
    id int identity primary key,
    timeValue int not null
)
DECLARE @newTime int;
SET @newTime = dbo.fnGetComparisonTime(@DateTimeValue)
SELECT id, timeValue 
FROM temp2
WHERE timeValue NOT BETWEEN (@newTime - 1) AND @newTime;
CREATE FUNCTION dbo.fnGetComparisonTime
    (
        @DateTimeValue datetime
    )
RETURNS int
AS
BEGIN
    -- Declarations
    DECLARE @Output int
    DECLARE @StartDate datetime

    SET @StartDate = '2000-01-01 00:00:00'
    SET @Output = DATEDIFF(minute, @StartDate, @ReportDateTime)    

    -- And we're done!
    RETURN @Output

END