निम्न क्वेरी एक सही परिणाम देता है लेकिन मैं एक ही परिणाम को तेजी से कैसे प्राप्त करूं?आज इस सप्ताह, इस महीने, इस तिमाही के आधार पर बिक्री को सारांशित करने का सबसे तेज़ तरीका?
लक्ष्य आज इस सप्ताह, महीने और तिमाही में अपनी बिक्री को सारांशित करके विक्रेताओं की प्रगति को ट्रैक करने के लिए एक तालिका आउटपुट करना है।
SellerID Today ThisWeek ThisMonth ThisQuarter
----------- --------------------- --------------------- --------------------- ---------------------
1 400,00 700,00 900,00 900,00
2 950,00 1850,00 2650,00 2650,00
मेरे प्रश्न:
CREATE TABLE #sales(
[Price] MONEY,
[Date] DATE,
[SellerID] INT
)
INSERT INTO #sales VALUES
(100, '2012-01-01', 1),
(200, '2012-04-01',1),
(300, '2012-04-23',1),
(400, '2012-04-27',1),
(700, '2012-01-01', 2),
(700, '2012-01-02', 2),
(800, '2012-04-01',2),
(900, '2012-04-23',2),
(950, '2012-04-27',2)
SELECT
SellerID AS SellerID,
SUM(CASE WHEN [Date] >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()),0) THEN [Price] END) AS Today,
SUM(CASE WHEN [Date] >= DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0) THEN [Price] END) AS ThisWeek,
SUM(CASE WHEN [Date] >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) THEN [Price] END) AS ThisMonth,
SUM(CASE WHEN [Date] >= DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()), 0) THEN [Price] END) AS ThisQuarter
FROM #sales
WHERE DATEPART(YEAR, [Date]) = DATEPART(YEAR, GETDATE())
GROUP BY SellerID
जब एक बड़ी मेज यह काफी धीमी गति से हो जाता है पर एक ही प्रश्न को क्रियान्वित। बस सीएएसई-स्टेटमेंट को हटाने से लगभग 50% निष्पादन समय में कटौती होती है।
मैं एक ही परिणाम को तेज़ी से और अधिक कुशल तरीके से कैसे प्राप्त कर सकता हूं?
जब तक आपकी '[तिथि]' कॉलम अनुक्रमित हो, मुझे लगता है कि आपके पास लेनदेन संबंधी डेटा पूछताछ के लिए पहले से ही सबसे कुशल समाधान है। यदि आप प्रदर्शन समस्याओं को मार रहे हैं तो आप डेटा वेयरहाउसिंग को एक्सप्लोर करना चाहेंगे। – GarethD
हां यह अनुक्रमित है। हम एसक्यूएल एज़ूर पर हैं जो दुर्भाग्य से इस समय सीमित है। मुझे यह भी लगता है कि यह एक बेहतर दृष्टिकोण होगा (+1)। –