需要帮助优化 T-SQL 查询

Posted

技术标签:

【中文标题】需要帮助优化 T-SQL 查询【英文标题】:Need help to optimize T-SQL query 【发布时间】:2014-04-23 16:15:59 【问题描述】:

以下是样本数据,

DECLARE @maxval int, @minval int
select @maxval=201301,@minval=201312

SELECT top 100001 CAST(((@maxval + 1) - @minval) *
    RAND(CHECKSUM(NEWID())) + @minval AS int)Date ,ceiling (RAND(CHECKSUM(NEWID())) *1000+25692*RAND(CHECKSUM(NEWID()))  )*ceiling (RAND(CHECKSUM(NEWID())) *1000+25692*RAND(CHECKSUM(NEWID()))  )ID
into #sample from sysobjects , syscolumns

问题:

有 2 列日期和 ID 获取第一个月的 id,例如 201302 需要在接下来的 3 个月内确定这些 ID 是否可用。所以这里是 201303,201304,201305 需要在所有月份重复此操作

这是我的代码,它需要更多的人工干预和时间。请帮忙。

select distinct   date from #sample order by DATE 

declare @processingdate varchar(6),@from varchar(6),@to varchar(6)
set @processingdate = '201302'
set @from = '201303'
set @to = '201305'


select distinct id into #Source from #sample where DATE = @processingdate
select distinct id into #lookup from #sample where DATE between @from and @to 

select @processingdate,count(*) from #Source where ID not in (select * from #lookup)

谢谢

【问题讨论】:

您能否添加一些示例数据来展示您想要的结果? 有没有可以利用的索引? 【参考方案1】:

试试这个:

select *
from #sample a
inner join #sample b
on a.ID = b.ID and a.Date IN (b.Date - 1, b.Date - 2, b.Date - 3)

【讨论】:

以上是关于需要帮助优化 T-SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 T-SQL 查询中使用 Levenshtein 距离 - 请帮助优化

优化我的 T-SQL 查询以提高性能

需要帮助优化一个有趣的 MySQL 查询

在 T-SQL 中使用 PIVOT 需要帮助

需要帮助将 T-SQL 转换为 PostgreSQL

请帮助优化查询