SQLite

2008-10-25 13 views
6

का उपयोग कर क्वेरी में पंक्तियों में अंतर ढूंढना मेरे पास SQLite तालिका है जिसमें विभिन्न उत्पादों के लिए कीमतें हैं। यह एक स्नैपशॉट टेबल है, इसलिए इसमें 5 मिनट अंतराल पर कीमतें हैं। मैं एक प्रश्न लिखना चाहता हूं जो प्रत्येक आइटम पर एक पंक्ति से अगले पंक्ति में अंतर को वापस कर देगा।SQLite

कॉलम आईडी (ऑटो इंक), record_id (उत्पाद की आईडी), मूल्य (समय में उस बिंदु पर मूल्य), समय (अवधि के बाद बस कुछ सेकंड) मैं एक वापस जाने के लिए 'कोशिश कर रहा हूँ

हैं अंतर 'कॉलम जिसमें अंतराल के बीच अंतर का मूल्य होता है।

 
Given the following 

id  record_id  price time 
1  apple001  36.00 ... 
67  apple001  37.87 ... 
765  apple001  45.82 ... 
892  apple001  26.76 ... 

I'd like it to return 
id  record_id  price time difference 
1  apple001  36.00 ...  0 
67  apple001  37.87 ...  1.87 
765  apple001  45.82 ...  7.95 
892  apple001  26.76 ...  -19.06 

क्या यह SQLite के साथ संभव है?

दूसरा, यह संभव होना चाहिए - क्या यह पिछले 5 या तो रिकॉर्ड तक सीमित करने का कोई तरीका है?

मैं किसी भी मदद की सराहना करता हूं, धन्यवाद।


बस कुछ चीजें जोड़ना चाहते थे। मुझे अन्य डेटाबेस में ऐसा करने के तरीके मिल गए हैं, लेकिन मैं XULRunner का उपयोग कर रहा हूं, इस प्रकार SQLite। यही कारण है कि मैं इसके बजाय इसके साथ काम कर रहा हूं।

द्वितीयक प्रश्न को स्पष्टीकरण की आवश्यकता हो सकती है, मैं उस समय तक आदेश देना चाहता हूं और पिछले 5 रिकॉर्डों का विश्लेषण और विश्लेषण कर रहा हूं। यह एक मुद्दा है यदि आवश्यकता होने पर मैं अलग से निपट सकता हूं।

यहां एक MySQL solution है, जैसा कि। यह दृष्टिकोण है जिसकी ओर मैं आगे बढ़ रहा हूं, लेकिन सौदा ब्रेकर है "यदि तालिका में अनुक्रम कॉलम होता है लेकिन अंतराल होते हैं, तो इसे पुनर्निर्मित करें। यदि तालिका में ऐसा कोई स्तंभ नहीं है, तो एक जोड़ें"। डिज़ाइन द्वारा इस परिदृश्य में अंतराल है क्योंकि कई रिकॉर्ड एक साथ अपडेट किए गए हैं और क्रम में नहीं होंगे।

उत्तर

8

मुझे नहीं पता कि SQLite में कुछ सीमाएं हैं या नहीं, लेकिन आप SQL सर्वर में काम कर रहे निम्न कथनों को आजमा सकते हैं।

तो समय अंतर निरंतर (आप कहते हैं कि यह 5 मिनट है) है, तो आप लिख सकते हैं:

SELECT A.id, A.record_id, A.price, A.time, ISNULL(A.price - B.price, 0) AS difference 
FROM Table1 as A 
    LEFT OUTER JOIN Table1 B ON A.record_id = B.record_id AND A.time - B.time = 5 

अन्यथा

SELECT A.id, A.record_id, A.price, A.time, ISNULL(A.price - B.price, 0) AS difference 
FROM Table1 as A 
    LEFT OUTER JOIN Table1 B ON B.record_id = A.record_id 
     AND B.time = (SELECT MAX(time) FROM Table1 C WHERE C.time < A.time AND C.record_id = A.record_id) 

एक कथन के बिना मिलती है पीछा कर रहा है

SELECT id, record_id, price, time, 
    (SELECT A.price - B.price 
     FROM Table1 as B 
     WHERE B.record_id = A.record_id AND 
      B.time = (SELECT MAX(time) FROM Table1 C WHERE C.time < A.time AND C.record_id = A.record_id)) AS difference 
FROM Table1 as A 

मुझे उम्मीद है कि उनमें से एक आपकी मदद करेगा।

+1

SQLite [ifnull] का उपयोग करता है (http://www.sqlite.org/lang_corefunc.html#ifnull) –

+0

क्या इसमें शामिल होना या इसमें शामिल होना बेहतर है, और क्यों? – EngrStudent