ฉันมีคิวรีต่อไปนี้และเนื่องจากมีSUM
การเรียกใช้ฟังก์ชันจำนวนมากเคียวรีของฉันจึงทำงานช้าเกินไป ฉันมีบันทึกจำนวนมากในฐานข้อมูลของฉันและฉันต้องการรับรายงานจากปีปัจจุบันและปีที่แล้ว (30 วันล่าสุด 90 วันล่าสุดและ 365 วันสุดท้าย) สำหรับแต่ละคน:
SELECT
b.id as [ID]
,d.[Title] as [Title]
,e.Class as [Class]
,Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-1,GETDATE()) THEN a.col1 ELSE 0 END) as [Current - Last 30 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-1,GETDATE()) THEN a.col2 ELSE 0 END) as [Current - Last 30 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-1,GETDATE()) THEN a.col1 ELSE 0 END) as [Current - Last 90 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-1,GETDATE()) THEN a.col2 ELSE 0 END) as [Current - Last 90 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-1,GETDATE()) THEN a.col1 ELSE 0 END) as [Current - Last 365 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-1,GETDATE()) THEN a.col2 ELSE 0 END) as [Current - Last 365 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-13,GETDATE()) and a.DateCol <= DATEADD(MONTH,-12,GETDATE()) THEN a.col1 ELSE 0 END) as [Last year - Last 30 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-13,GETDATE()) and a.DateCol <= DATEADD(MONTH,-12,GETDATE()) THEN a.col2 ELSE 0 END) as [Last year - Last 30 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-5,GETDATE()) and a.DateCol <= DATEADD(QUARTER,-4,GETDATE()) THEN a.col1 ELSE 0 END) as [Last year - Last 90 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-5,GETDATE()) and a.DateCol <= DATEADD(QUARTER,-4,GETDATE()) THEN a.col2 ELSE 0 END) as [Last year - Last 90 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-2,GETDATE()) and a.DateCol <= DATEADD(YEAR,-1,GETDATE()) THEN a.col1 ELSE 0 END) as [Last year - Last 365 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-2,GETDATE()) and a.DateCol <= DATEADD(YEAR,-1,GETDATE()) THEN a.col2 ELSE 0 END) as [Last year - Last 365 Days Col2]
FROM
tb1 a
INNER JOIN
tb2 b on a.id=b.fid and a.col3 = b.col4
INNER JOIN
tb3 c on b.fid = c.col5
INNER JOIN
tb4 d on c.id = d.col6
INNER JOIN
tb5 e on c.col7 = e.id
GROUP BY
b.id, d.Title, e.Class
ใครบ้างมีความคิดใด ๆ ฉันจะปรับปรุงแบบสอบถามของฉันเพื่อให้ทำงานได้เร็วขึ้นได้อย่างไร
แก้ไข:ฉันได้รับการสนับสนุนให้ย้ายการDATEADD
เรียกใช้ฟังก์ชันไปที่where
คำสั่งและโหลดสองปีแรกก่อนจากนั้นกรองพวกเขาในคอลัมน์ แต่ฉันไม่แน่ใจว่าคำตอบที่แนะนำนั้นได้รับการดำเนินการและทำงานแล้วสามารถพบได้ที่นี่: https: // stackoverflow ดอทคอม / a / 59944426/12536284
หากคุณเห็นด้วยกับวิธีการแก้ปัญหาข้างต้นโปรดแสดงให้ฉันเห็นว่าฉันจะนำไปใช้ในการสืบค้นปัจจุบันได้อย่างไร
เพียงแค่ FYI ฉันใช้ SP นี้ใน C #, Entity Framework (DB-First) บางสิ่งเช่นนี้:
var result = MyDBEntities.CalculatorSP();
Execution Plan
เรายังคงไม่ได้เห็น กรุณาโพสต์มัน