gpt4 book ai didi

sql-server-2005 - 用于查找 1-N 关系中第一个(按日期)关联记录的有效 SQL 查询

转载 作者:行者123 更新时间:2023-12-03 01:18:49 24 4
gpt4 key购买 nike

场景如下:有一个软件表 (PK = SoftwareID) 和一个关联的发布表 (PK = [SoftwareID,Version])。

发布可以是主要版本或次要版本,版本类型由 Release.ReleaseType ('MAJ', 'MIN') 标识。

发布还由日期来表征:Release.ReleaseDate。

软件被划分为多个类别,由 Software.CategoryID 标识。

问题:需要一个有效 T-SQL 查询来列出某个类别的所有软件,并且第一个主要发布日期落在给定间隔内,由 @DateFrom、@DateTo 分隔。最终结果集中唯一需要的列是 SoftwareID 和 ReleaseDate。

这不是真实的案例场景,但我这样表述是为了更容易理解。在实际情况中,Release 表将有大约 1000 万条记录,而 Software 表将有大约 100 万条记录。我已经想出了一个解决方案,但速度很慢,我觉得这里的专家可能会找到更好的解决方案。

这是我的缓慢解决方案:

select  s.SoftwareID, min(r.ReleaseDate)
from
Software s inner join Release r on (s.SoftwareID = r.SoftwareID)
where s.CategoryID = @Category
and r.ReleaseType = 'MAJ'
group by
s.SoftwareID
having
min(r.ReleaseDate) >= @DateFrom
and min(r.ReleaseDate) < @DateTo

谢谢。

最佳答案

您的查询很好。

您可能需要确保您的查询有正确的索引:

  • 在“MSSQL Management Studio”中:“查询”->“在数据库引擎优化顾问中分析查询”,然后按照“白兔”操作(首选)
  • 在“MSSQL Management Studio”中:“查询”->“包括实际执行计划”。然后运行查询,并查看执行计划是否建议新索引。

关于sql-server-2005 - 用于查找 1-N 关系中第一个(按日期)关联记录的有效 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/974123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com