T-SQL技术问题:如何获取指定条件下Recording Date的最小/最大值
修正SQL查询以获取符合条件的Recording Date极值
原查询的问题在于WHERE子句中的子查询未添加逻辑关联(比如IN),且子查询未限定仅针对符合pattern = 'nnnnnn-n'的记录,导致子查询完全未发挥筛选作用,最终返回了所有符合pattern的记录。
正确写法1:直接聚合筛选后的记录
先过滤出符合pattern条件的记录,再直接计算最小和最大Recording Date:
SELECT MIN([Recording Date]) AS MIN_DATE, MAX([Recording Date]) AS MAX_DATE FROM [TPEConversionTeam].[dbo].[KY_Shelby_Recorder_History] WHERE REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( TRIM([Document Number]), '0','n'),'1','n'),'2','n'),'3','n'),'4','n'),'5','n'),'6','n'),'7','n'),'8','n'),'9','n') = 'nnnnnn-n'
正确写法2:用CTE简化重复的Pattern计算
如果需要保留pattern字段以确认筛选逻辑,可用CTE先统一计算pattern,再聚合:
WITH FilteredRecords AS ( SELECT [Recording Date], REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( TRIM([Document Number]), '0','n'),'1','n'),'2','n'),'3','n'),'4','n'),'5','n'),'6','n'),'7','n'),'8','n'),'9','n') AS pattern FROM [TPEConversionTeam].[dbo].[KY_Shelby_Recorder_History] ) SELECT MIN([Recording Date]) AS MIN_DATE, MAX([Recording Date]) AS MAX_DATE, pattern FROM FilteredRecords WHERE pattern = 'nnnnnn-n' GROUP BY pattern
原查询错误点说明
- WHERE子句缺少逻辑运算符(如
IN)连接子查询,导致子查询被忽略 - 子查询未限定仅筛选符合pattern条件的记录,即使添加连接符,也会返回全表的极值而非目标子集的极值
内容的提问来源于stack exchange,提问作者DDJE
相关产品推荐
相关产品推荐

