Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL तालिका और डेटा निष्कर्षण

इससे आपको मनचाहा परिणाम मिलेगा।

;with cast_cte
as
(
  select [TRADE_ID], cast([TIMESTAMP] as datetime) timestamp, [SECURITY], [QUANTITY], cast([PRICE] as float) as price
  from tbProduct
)
select t1.trade_id, t2.trade_id, datediff(ms, t1.timestamp, t2.timestamp) as milliseconds_diff,
((t1.price - t2.price) / t1.price) * 100 as price_diff
from cast_cte t1
inner join cast_cte t2
on datediff(ms, t1.timestamp, t2.timestamp) between 0 and 10000
and t1.trade_id <> t2.trade_id
where ((t1.price - t2.price) / t1.price) * 100 > 10
or ((t1.price - t2.price) / t1.price) * 100 < -10

हालांकि, स्कीमा और सामान्य क्वेरी पैरामीटर के साथ कई समस्याएं हैं:

1) कॉलम सभी वर्चर्स हैं। यह बहुत अक्षम है क्योंकि वांछित परिणाम प्राप्त करने के लिए उन सभी को उनके उपयुक्त डेटा प्रकारों में डालने की आवश्यकता है। डेटाटाइम, इंट, फ्लोट आदि का उपयोग करें। (मैंने @ जेरोएन-मोस्टर्ट के सुझाव के अनुसार क्वेरी को साफ करने के लिए सीटीई का उपयोग किया है)

2) जैसे-जैसे तालिका बड़ी होती जाएगी यह क्वेरी बहुत खराब प्रदर्शन करना शुरू कर देगी क्योंकि इस्तेमाल किए गए विधेय (10 सेकंड का टाइमस्टैम्प) ठीक से अनुक्रमित नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. नई SQL रिकॉर्ड आईडी प्राप्त करें

  2. क्या सम्मिलित क्वेरी के भीतर कोई अन्य क्वेरी करने का कोई तरीका है?

  3. SQL सर्वर में किसी तालिका में इष्टतम अद्वितीय पहचानकर्ता कैसे खोजें:sp_special_columns

  4. SQL सर्वर - शामिल होने की आवश्यकता है लेकिन जहां समान नहीं है

  5. वर्चर के रूप में संग्रहीत तिथियों की तुलना करना