Tal*_*ist 1 sql t-sql sql-server sql-server-2008-r2
我有下面的查询,我把它放在一起,它运行得很糟糕(因为我相信你可以看到).
我很确定它与我转换日期时间的方式有关,这样我就可以参考昨天的数据了.
dtInteractionLocalStartTime是一个日期时间字段,我希望它显示为mm/dd/yyyy而不是yyyy-mm-dd hh:mm:ss.sss
关于如何优化这个的任何想法?我已经度过了这两天,我无法弄明白.
这是我的查询:
SELECT TOP 100 PERCENT
       Date ,
       CONVERT(varchar, VDN) AS VDN ,
       COUNT(*) AS Calls ,
       Avaya
FROM ( SELECT DISTINCT TOP 100 PERCENT
              CONVERT(varchar,dtInteractionLocalStartTime,101) AS Date ,
              vcVectorNumber AS VDN ,
              iCompoundID ,
              'CM03' AS Avaya
       FROM NICEHUB3ADTM.nice_dw.dbo.vwNiceDBKitInteraction AS i
       WHERE CONVERT(varchar(10) , dtInteractionLocalStartTime,101) = CONVERT(varchar(10),GETDATE()-1,101)
         AND iMediaTypesId = 2
         AND tiCallDirectionTypeID = 1
         AND tiInteractionTypeID = 2
         AND iInteractionOpenReasonID & 16 = 0
         AND iInteractionOpenReasonID & 4 = 0
         AND iInteractionID NOT IN ( SELECT iInteractionID
                                     FROM NICEHUB3ADTM.nice_dw.dbo.vwException AS e
                                     WHERE i.iInteractionID = iInteractionID
                                       AND iExceptionTypeID IN (37, 12, 12310)
                                   )
     ) AS derivedtbl_1
GROUP BY Date ,
         CONVERT(varchar,VDN) ,
         Avaya
ORDER BY Date ,
         VDN
如果您只想要日期而不是日期时间,只需使用:
CAST(yourDate AS DATE)
任何格式化都应该在sql之外完成,因为sql几乎没有针对这类事情进行优化,并且当你的视图逻辑工作进入模型时,最终会破坏关注点.
至少,将子查询中的转换调用更改为上面的转换,并仅将一个转换添加到最外面的选择(在分组之后).如果你有能力在其他地方重构逻辑,我仍然会完全避免它.
| 归档时间: | 
 | 
| 查看次数: | 1588 次 | 
| 最近记录: |