2009-09-25 21 views
19

में MAX जैसे कुल फ़ंक्शन का उपयोग कैसे करें, मुझे इस रिकॉर्ड के लिए अधिकतम मान प्राप्त करना है। कृपया मेरी मदद करो:एसक्यूएल सर्वर: WHERE क्लॉज

SELECT rest.field1 
    FROM mastertable AS m 
    INNER JOIN (
     SELECT t1.field1 field1, 
       t2.field2 
      FROM table1 AS T1 
      INNER JOIN table2 AS t2 ON t2.field = t1.field 
      WHERE t1.field3=MAX(t1.field3) 
     --     ^^^^^^^^^^^^^^ Help me here. 
    ) AS rest ON rest.field1 = m.field 
+0

मैं कोई एसक्यूएल गुरु नहीं हूं लेकिन क्या यह काम करता है या नहीं? आप यह भी नहीं बताते कि आपको क्या परेशानी हो रही है और क्या आपका पोस्ट समाधान काम करता है या नहीं। –

+0

आपको यह बताने की ज़रूरत है कि आप इस प्रश्न को समझने के लिए मेरे लिए क्या बेहतर चाहते हैं। – tster

+0

उचित परिणाम प्राप्त करने के लिए कोई समाधान है? –

उत्तर

18

आप एक उप क्वेरी का उपयोग कर सकता है ...

WHERE t1.field3 = (SELECT MAX(st1.field3) FROM table1 AS st1) 

लेकिन मैं वास्तव में जहां खंड के बाहर और बयान में शामिल होने में इस ले जाते हैं, एक के रूप में पर और के लिए होगा खंड।

+0

उप क्वेरी जो आप चाहते हैं उसे प्राप्त करने का एकमात्र संभावित तरीका है। –

3
SELECT rest.field1 
FROM mastertable as m 
INNER JOIN table1 at t1 on t1.field1 = m.field 
INNER JOIN table2 at t2 on t2.field = t1.field 
WHERE t1.field3 = (SELECT MAX(field3) FROM table1) 
30

जैसा कि आपने देखा है, WHERE खंड आपको इसमें योग का उपयोग करने की अनुमति नहीं देता है। HAVING खंड यही है।

HAVING t1.field3=MAX(t1.field3) 
+2

साइड नोट (5+ साल बाद) के रूप में, 'हैविंग' क्लॉज वास्तव में समूहीकृत तत्वों के उपयोग के लिए है। हालांकि, यह 'ग्रुप बाय' क्लॉज के बिना भी अधिकांश SQL इंजनों में कुल क्लॉज ('MIN',' MAX', 'AVG') के साथ काम करता है। – Powerlord

1

हाँ आप एक होने खंड, खंड द्वारा समूह के बाद उपयोग करने के लिए एक के बाद बयान के बाद से सरल पैरामीटर, पर डेटा लेकिन समूह फिल्टर करने के लिए के रूप में जहां सिर्फ जरूरत समूह के लिए विचार है डेटा और कुछ समेकित फ़ंक्शन के आधार पर यह फ़िल्टर कर ...... होने खंड में अधिकतम उपयोग करने के लिए

5

सही तरीका एक आत्म प्रदर्शन से पहले में शामिल होने:

select t1.a, t1.b, t1.c 
from table1 t1 
join table1 t1_max 
    on t1.id = t1_max.id 
group by t1.a, t1.b, t1.c 
having t1.date = max(t1_max.date) 

निम्नलिखित कैसे आप है एक उपनगर के साथ शामिल हो जाएगा y:

select t1.a, t1.b, t1.c 
from table1 t1 
where t1.date = (select max(t1_max.date) 
       from table1 t1_max 
       where t1.id = t1_max.id) 

एक समग्र जब एक बहु तालिका के साथ काम कर उपयोग करने से पहले एक भी डाटासेट बनाने के लिए सुनिश्चित करें में शामिल होने:

select t1.id, t1.date, t1.a, t1.b, t1.c 
into #dataset 
from table1 t1 
join table2 t2 
    on t1.id = t2.id 
join table2 t3 
    on t1.id = t3.id 


select a, b, c 
from #dataset d 
join #dataset d_max 
    on d.id = d_max.id 
having d.date = max(d_max.date) 
group by a, b, c 

उप क्वेरी संस्करण:

select t1.id, t1.date, t1.a, t1.b, t1.c 
into #dataset 
from table1 t1 
join table2 t2 
    on t1.id = t2.id 
join table2 t3 
    on t1.id = t3.id 


select a, b, c 
from #dataset d 
where d.date = (select max(d_max.date) 
       from #dataset d_max 
       where d.id = d_max.id) 
0

लेकिन इसकी अभी भी क्वेरी बिल्डर में एक त्रुटि संदेश दे रहा है। मैं SqlServerCe 2008.

SELECT   Products_Master.ProductName, Order_Products.Quantity, Order_Details.TotalTax, Order_Products.Cost, Order_Details.Discount, 
        Order_Details.TotalPrice 
FROM   Order_Products INNER JOIN 
        Order_Details ON Order_Details.OrderID = Order_Products.OrderID INNER JOIN 
        Products_Master ON Products_Master.ProductCode = Order_Products.ProductCode 
HAVING  (Order_Details.OrderID = (SELECT MAX(OrderID) AS Expr1 FROM Order_Details AS mx1)) 

मैं प्रतिस्थापित कहां के साथ के रूप में @powerlord से कहा था उपयोग कर रहा हूँ। लेकिन अभी भी एक त्रुटि दिखा रहा है।

क्वेरी को पार्स करने में त्रुटि। [टोकन लाइन नंबर = 1, टोकन लाइन ऑफसेट = 371, त्रुटि में टोकन = चयन]

+0

मुझे लगता है कि आप यहां हैविंग क्लॉज को सरल बना सकते हैं 'ऑर्डर_Details.OrderID = MAX (Order_Details.OrderID) ' – Powerlord

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