Not enough information. Could be missing indexes, could be incorrect stats, could be a few other things
Please post table definitions, index definitions and execution plan, see http://www.sqlservercentral.com/articles/SQLServerCentral/66909/ for details
Cleaned up query:
SELECT COUNT(*) FRMP_RecordCount ,
b.RECORD_ID FRMP_Record_Id ,
b.METER_ID FRMP_Meter_Id ,
CONVERT(VARCHAR(10), a.FromDate, 103) FRMP_FromDate ,
CONVERT(VARCHAR(10), a.ToDate, 103) FRMP_ToDate ,
CONVERT(VARCHAR(10), b.Billing_Start_Date, 103) FRMP_Billing_Start_Date ,
CONVERT(VARCHAR(10), b.Billing_End_Date, 103) FRMP_Billing_End_Date ,
NetAmount FRMP_NetAmount ,
a.Party FRMP_Party ,
b.PROVIDER FRMP_Provider
FROM ( SELECT d.RECORD_ID ,
d.METER_ID ,
d.BILLING_START_DATE ,
d.BILLING_END_DATE ,
d.NET_AMOUNT AS NetAmount ,
d.PROVIDER
FROM ( SELECT METER_ID ,
BILLING_START_DATE ,
BILLING_END_DATE ,
PROVIDER
FROM NETWORK_VALIDATION..evd_NonNBV_ForChecking_BAU
GROUP BY METER_ID ,
BILLING_START_DATE ,
BILLING_END_DATE ,
Provider
HAVING SUM(net_AMOUNT) <> 0
) c
INNER JOIN NETWORK_VALIDATION..evd_NonNBV_ForChecking_BAU d ON c.METER_ID = d.METER_ID
AND c.BILLING_START_DATE = d.BILLING_START_DATE
AND c.BILLING_END_DATE = d.BILLING_END_DATE
) b --From #MyTemp_1 b
LEFT JOIN NETWORK_VALIDATION..MSATS_DATA_BAU_FINAL a ON a.NMI = b.METER_ID
AND ( ( ( b.BILLING_START_DATE BETWEEN a.FromDate AND a.ToDate )
AND ( b.billing_end_date BETWEEN a.FromDate AND a.ToDate )
)
AND a.Role = 'FRMP'
)
--Where a.NMI Is Null
GROUP BY b.RECORD_ID ,
b.METER_ID ,
CONVERT(VARCHAR(10), a.FromDate, 103) ,
CONVERT(VARCHAR(10), a.ToDate, 103) ,
CONVERT(VARCHAR(10), b.Billing_Start_Date, 103) ,
CONVERT(VARCHAR(10), a.ToDate, 103) ,
CONVERT(VARCHAR(10), b.Billing_End_Date, 103) ,
NetAmount ,
a.Party ,
b.PROVIDER
Gail Shaw
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability