2008-09-24 11 views
5

मैं एक प्रश्न लिखने की कोशिश कर रहा हूं जो बिल तालिका से दो सबसे हाल की पंक्तियों को वापस खींच लेगा जहां अनुमानित ध्वज सत्य है। पकड़ यह है कि इन्हें लगातार बिल होने की आवश्यकता है।लगातार दो पंक्तियां खोजें

इसे जल्द ही रखने के लिए, यदि पिछले दो बिल चक्रों के लिए बिल का अनुमान लगाया गया है तो मुझे दूसरी तालिका में एक पंक्ति दर्ज करने की आवश्यकता है।

यदि संभव हो तो मैं कर्सर के बिना ऐसा करना चाहता हूं, क्योंकि मैं डेटा की बड़ी मात्रा में काम कर रहा हूं और इसे काफी बार चलाना है।

संपादित

एक AutoIncrement मेज पर (1,1) स्तंभ है।

 
BillId    AccountId   Estimated InvoiceDate 
-------------------- -------------------- --------- ----------------------- 
1111196    1234567    1   2008-09-03 00:00:00.000 
1111195    1234567    0   2008-08-06 00:00:00.000 
1111194    1234567    0   2008-07-03 00:00:00.000 
1111193    1234567    0   2008-06-04 00:00:00.000 
1111192    1234567    1   2008-05-05 00:00:00.000 
1111191    1234567    0   2008-04-04 00:00:00.000 
1111190    1234567    1   2008-03-05 00:00:00.000 
1111189    1234567    0   2008-02-05 00:00:00.000 
1111188    1234567    1   2008-01-07 00:00:00.000 
1111187    1234567    1   2007-12-04 00:00:00.000 
1111186    1234567    0   2007-11-01 00:00:00.000 
1111185    1234567    0   2007-10-01 00:00:00.000 
1111184    1234567    1   2007-08-30 00:00:00.000 
1111183    1234567    0   2007-08-01 00:00:00.000 
1111182    1234567    1   2007-07-02 00:00:00.000 
1111181    1234567    0   2007-06-01 00:00:00.000 
1111180    1234567    1   2007-05-02 00:00:00.000 
1111179    1234567    0   2007-03-30 00:00:00.000 
1111178    1234567    1   2007-03-02 00:00:00.000 
1111177    1234567    0   2007-02-01 00:00:00.000 
1111176    1234567    1   2007-01-03 00:00:00.000 
1111175    1234567    0   2006-11-29 00:00:00.000 

इस मामले में, केवल रिकॉर्ड 1,111,188 और:


CREATE TABLE Bills (
    BillId INT AUTOINCREMENT(1,1,) PRIMARY KEY, 
    Estimated BIT NOT NULL, 
    InvoiceDate DATETIME NOT NULL 
) 

तो तुम जैसे परिणामों के एक सेट हो सकता है: दूर तालिका संरचना का बहुत अधिक देने के बिना, तालिका संरचना का अनिवार्य रूप से है 1111187 लगातार होगा।

+0

... पंक्तियों एक आईडी क्षेत्र है? – Swati

+0

क्या आप अधिक जानकारी पोस्ट कर सकते हैं? शायद एक नमूना डेटा सेट ताकि हम "लगातार" और "निरंतर" मामलों को देख सकें। –

+0

जैसा कि उत्तर से ऊपर टिप्पणी की गई है, आप 'लगातार' पंक्तियों पर विचार कर रहे हैं। कृपया एक उदाहरण दें। – rslite

उत्तर

11

मान लिया जाये कि पंक्तियों अनुक्रमिक आईडी है, कुछ इस तरह हो सकता है आप जो खोज रहे हैं:

select top 1 * 
from 
Bills b1 
inner join Bills b2 on b1.id = b2.id - 1 
where 
b1.IsEstimate = 1 and b2.IsEstimate = 1 
order by 
b1.BillDate desc 
+1

मुझे लगता है, यह धारणा त्रुटिपूर्ण हो सकती है। असफल आवेषण (उदा। एक लेनदेन 'आरक्षित' एक आईडी, लेकिन वापस लुढ़का गया था), इसका मतलब होगा कि वैध अनुक्रम लंबे अनुक्रमिक नहीं हैं। – Neil

0

आप एक descensing पर अनुमान लगाया गया = true अनुसार क्रमबद्ध क्वेरी करते हैं और इसलिए मैं ठीक वही भाषा संरचना

0

आप के लिए "बयान नंबर एक स्तंभ है नहीं कर सकते देने के चयन शीर्ष 2. मैं एसक्यूएल में सबसे अच्छा नहीं कर रहा हूँ में सक्षम होना चाहिए ", उदाहरण के लिए, यदि Q12008 किसी विशेष ग्राहक के लिए 28 बयान था, तो प्रश्न 22008 का बिल 2 9 होगा, क्यू 32008 का बिल 30 होगा (त्रैमासिक बिलिंग मानते हुए)। फिर आप जांच सकते हैं कि तारीख मैनिपुलेशन करने के बजाय कथन संख्या निकट थी।

2
select top 2 * 
from bills 
where estimated = 1 
order by billdate desc 
+0

धन्यवाद, थैस्ट जो मैं बात कर रहा था लेकिन मैं बिना किसी प्रश्न के सटीक क्वेरी के साथ आ सकता था जबकि :) – mattlant

+0

क्या यह सभी अनुमानित बिलों को वापस नहीं करेगा, केवल निरंतरता के बावजूद, तिथि से उतरने का आदेश दिया गया है? –

+0

यह क्वेरी ठीक है कि उसने सवाल कैसे कहा। बिल तालिका से अनुमानित अंतिम दो बिल प्राप्त करें। यदि कोई अन्य मानदंड था, तो यह कहा जाना चाहिए। – mattlant

संबंधित मुद्दे