Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
没有必要让它运行得更快。您能详细介绍一下结果表和#tmp的结构吗?每个表的唯一键是什么?每个行中有多少行?lag()的作用是什么?您好,对不起,我使用的是SQL Server 2012。这仅适用于Azure,2014年和2016年。更新:索引并没有加快更新_Sql_Sql Server_Tsql_Stored Procedures_Ssms - Fatal编程技术网

没有必要让它运行得更快。您能详细介绍一下结果表和#tmp的结构吗?每个表的唯一键是什么?每个行中有多少行?lag()的作用是什么?您好,对不起,我使用的是SQL Server 2012。这仅适用于Azure,2014年和2016年。更新:索引并没有加快更新

没有必要让它运行得更快。您能详细介绍一下结果表和#tmp的结构吗?每个表的唯一键是什么?每个行中有多少行?lag()的作用是什么?您好,对不起,我使用的是SQL Server 2012。这仅适用于Azure,2014年和2016年。更新:索引并没有加快更新,sql,sql-server,tsql,stored-procedures,ssms,Sql,Sql Server,Tsql,Stored Procedures,Ssms,没有必要让它运行得更快。您能详细介绍一下结果表和#tmp的结构吗?每个表的唯一键是什么?每个行中有多少行?lag()的作用是什么?您好,对不起,我使用的是SQL Server 2012。这仅适用于Azure,2014年和2016年。更新:索引并没有加快更新语句的速度。什么意思是2012年不可用?我不能从结果表中获取所有信息,因为该表中有数百万行。如果我在这里添加一些约束,它会工作吗?lag()做什么?嗨,对不起,我在SQL Server 2012上。这仅适用于Azure,2014年和2016年。



没有必要让它运行得更快。您能详细介绍一下结果表和#tmp的结构吗?每个表的唯一键是什么?每个行中有多少行?lag()的作用是什么?您好,对不起,我使用的是SQL Server 2012。这仅适用于Azure,2014年和2016年。更新:索引并没有加快更新语句的速度。什么意思是2012年不可用?我不能从结果表中获取所有信息,因为该表中有数百万行。如果我在这里添加一些约束,它会工作吗?lag()做什么?嗨,对不起,我在SQL Server 2012上。这仅适用于Azure,2014年和2016年。更新:索引并没有加快更新语句的速度。什么意思是2012年不可用?我不能从结果表中获取所有信息,因为该表中有数百万行。如果我在这里添加一些约束条件,它会起作用吗?不确定这是否会更快,但确实值得一试。此解决方案与原始解决方案所需的处理时间相同。很抱歉D:好吧,我甚至没有想到会加速,它针对的是“由于查询的前1部分,我不能这样做”的问题——现在没有前1部分。在具有16M行和300k唯一“数字”的表上进行测试,此查询大约需要7秒。不确定这是否会更快,但确实值得一试。此解决方案需要与原始解决方案相同的处理时间。很抱歉D:好吧,我甚至没有想到会加速,它针对的是“由于查询的前1部分,我不能这样做”的问题——现在没有前1部分。在具有16M行和300k唯一“数字”的表上进行测试,此查询大约需要7秒。Msg 157,级别15,状态1,第53行聚合可能不会出现在UPDATE语句的集合列表中。@Paul是的,我忘记了这一点。需要有一个子查询。我将在明天修复或删除它WMSG 157,级别15,状态1,第53行UPDATE语句的集合列表中可能不会出现聚合。@Paul是的,我忘记了。需要有一个子查询。明天我将修复或删除它
UPDATE #tmp
SET prev_test_date = (  
    SELECT TOP 1 r.test_date 
    FROM [dbo].[results] r (NOLOCK)
    WHERE r.number = #tmp.number
    AND r.test_date < #tmp.test_date
    ORDER BY r.test_date DESC
)       
UPDATE #tmp
SET prev_test_date = (  
    SELECT TOP 1 r.test_date 
    FROM [dbo].[results] r
    WHERE r.number = #tmp.number AND
          r.test_date < #tmp.test_date
    ORDER BY r.test_date DESC
)   
with r as (
      select r.*,
             lag(r.test_date) over (partition by r.number order by r.test_date desc) as prev_test_date
      from [dbo].[results] r
     )
update t
    set t.prev_test_date = r.prev_test_date
    from #tmp t join
         r
         on t.number = r.number;
UPDATE #tmp
   SET #tmp.prev_test_date = tt.maxdate 
from #tmp 
join 
(
select #tmp.number, max(r.test_date) maxdate 
  from #tmp
  join [dbo].[results] r (NOLOCK)
        on r.number = #tmp.number
       AND r.test_date < #tmp.test_date
 group by #tmp.number 
 ) tt
 on tt.number = #tmp.number
UPDATE #tmp
SET prev_test_date = (  
    SELECT max(r.test_date) 
    FROM [dbo].[results] r (NOLOCK)
    WHERE r.number = #tmp.number
    AND r.test_date < #tmp.test_date    
)  
with cteOrderedResults as (
  -- Ideally R will be clustered by number, test_date for this
  select      R.number
              ,R.test_date
              ,row_number() over  (   partition by R.number
                                      order by R.test_date desc 
                                      -- So the most recent R.test_date from 
                                      -- before T.test_date gets RowNo=1
                                  ) as RowNo
  from        dbo.results R
  inner join  #tmp T            on R.number=T.number
                                and R.test_date<T.test_date

  )
update      T
set         T.prev_test_date=R.test_date
from        #tmp T
inner join  cteOrderedResults R   on T.number=R.number
                                  and 1=R.RowNo