sql server 查询中是不是需要嵌套子选择来选择最大的 1 个字段和最小的另一个?

Posted

技术标签:

【中文标题】sql server 查询中是不是需要嵌套子选择来选择最大的 1 个字段和最小的另一个?【英文标题】:Are nested sub-selects needed in sql server query to select max of 1 field and min of another?sql server 查询中是否需要嵌套子选择来选择最大的 1 个字段和最小的另一个? 【发布时间】:2013-06-27 13:13:47 【问题描述】:

我需要在表中选择包含一个字段 (queryresolutiondate) 的最大值的记录,然后在该子集中,我只需要选择包含另一个字段 (queryestablishdate) 的最小值的记录。我试图在单个子选择中选择最小值和最大值,但不幸的是,绝对最小值和最大值并不总是出现在同一条记录中,因此不会返回任何记录。

以下查询有效,但此代码是返回大约 45 列的更大查询的一部分,我不希望将 44 列分组:

select
q.[SourceCustomerId],
q.[SourceProductCode],
q.[SourceProductIssueNum],
min (q.[QueryEstablishDate]),
q.[SourceQueryCode],
q.[SourceQueryStatus],
q.[QueryResolutionDate]

from [dbo]..[dQueryAll] q with (nolock) 

inner join (select [SourceCustomerId], [SourceProductCode], [SourceProductIssueNum],   [SourceQueryCode], 
 max([QueryResolutionDate]) as maxQueryResolutionDate
from [dbo]..[dQueryAll] with (nolock) 
where [SourceQueryCode] = 311
group by [sourceCustomerId], [SourceProductCode], [SourceProductIssueNum], [SourceQueryCode]) qg 
on (qg.[SourceCustomerId] = q.[SourceCustomerId] and qg.[SourceProductCode] = q.[SourceProductCode]
 and qg.[SourceProductIssueNum] = q.[SourceProductIssueNum] 
 and qg.maxQueryResolutionDate = q.[QueryResolutionDate])

group by
q.[SourceCustomerId],
q.[SourceProductCode],
q.[SourceProductIssueNum],
q.[SourceQueryCode],
q.[SourceQueryStatus],
q.[QueryResolutionDate]

我想知道是否可以在上面的子选择中创建另一个子选择,以从包含最大解决日期的 rocrds 中选择最小建立日期。如果可以的话,我需要一些帮助

我有一个表格中的数据示例,已粘贴到 Excel 中,但在此处找不到如何加载它。

【问题讨论】:

【参考方案1】:

您可以嵌套选择,但是如果有良好的相关索引,按大量列分组应该不会成为性能问题。

至于嵌套,只需编写内部子查询,如果它在平面表上运行,则编写外部子查询。用内部子查询替换平面子查询。

HTH

【讨论】:

我尝试了以下方法,但仍然无法正常工作...有什么建议吗? 内部子查询返回什么?为什么要(外部= 331)数据已经受到内部= 331的限制。实际上我已经看到了这种情况使优化器感到困惑并导致查询执行时间变得更长(这在SQL7天很有用但不是不再)没有一些测试数据很难评论,你能发布一个模式和一些插入语句吗? 我在 Excel 文件中有测试数据,但不知道如何在此处发布 我还发现我需要添加另一个选择标准,这使得这更复杂......当源查询状态 = 1 时,我想要最小解析日期(始终是 1/1/1900和最小建立日期。但是,对于所有其他源查询代码,我仍然想要原始条件 我解决了最近的问题,最后只保留了分组。感谢你的协助。我应该将问题标记为已回答吗?

以上是关于sql server 查询中是不是需要嵌套子选择来选择最大的 1 个字段和最小的另一个?的主要内容,如果未能解决你的问题,请参考以下文章

关于SQL DELETE嵌套子查询问题

sql语句中where条件的嵌套子查询性能

求SQL相关子查询和嵌套子查询通俗的区别 ?

SQL - 嵌套子查询

SQL相关子查询和嵌套子查询的区别

SQL 查询优化(嵌套子查询)