2011-01-14 12 views
5

साथ चयन मैं ऐसी त्रुटियां जो द्वारा आदेश मिलन के बाद आना चाहिए हो रही है, लेकिन मैं प्रश्नों से पहले एक के लिए संयुक्त आदेश दिया और उसके बाद के लिए 10.एसक्यूएल: यूनिअन आदेश देकर और सीमा

SELECT * 
    FROM (SELECT time, x, y, z 
      FROM db 
     WHERE time >= now 
     ORDER by time, x 
     UNION 
     SELECT time, x, y, z 
     FROM db 
     WHERE time < now 
    ORDER by time, x) 
LIMIT 10 

मैं सीमित करने के लिए इन चाहते हैं आशा है कि आप समझेंगे, मैं क्या करने की कोशिश कर रहा हूं और मेरी मदद कर सकता हूं ;-)

+0

यह SQLITE के लिए है: android.database.sqlite.SQLiteException: खंड द्वारा आदेश UNION के बाद नहीं होना चाहिए: –

उत्तर

4

यह कम से कम MySQL में नहीं है (आपने निर्दिष्ट नहीं किया है)। ऑर्डर ऑपरेशन डेटा के चयन के बाद आता है और सभी यूनियन, ग्रुप बीईएस आदि का प्रदर्शन किया गया है।

इस आसपास के रास्ते के लिए SQL Server: ORDER BY in subquery with UNION देखें।

7

एंट्री यूनियन को प्रभावित करने वाला एक आदेश होगा।

वैसे भी, ऐसा लगता है कि आप now के नजदीक पंक्तियां चाहते हैं। आप इस कोशिश कर सकते:

SELECT time, x, y, z 
FROM  db 
ORDER BY ABS(time - now) ASC 
LIMIT 10 
+0

धन्यवाद, मुझे लगता है कि यह है .. –

4

"मानक" एसक्यूएल (के "मानक" कुछ परिभाषा के लिए) में;

select top 10 * 
from (  select time,x,y,z from db where time > now 
     union select time,x,y,z from db where time < now 
    ) t 
order by t.time 

एसक्यूएल कार्यान्वयन के बीच परिणाम सेट में पंक्तियों की संख्या को सीमित करने के लिए कैसे भिन्न हो सकता है।

21

अगर आप SQLite में एक बहुत जटिल क्वेरी है, लेकिन आदेश के साथ संघ उपयोग करने की आवश्यकता है, तो आप कोशिश कर सकते हैं

 
select * from (
    select * from b ORDER BY date asc 
    ) 
UNION 
select * from (
    select * from b ORDER BY name desc 
    ) 
UNION 
select * from (
    select * from b ORDER BY gender asc 
    ) 
2

कोई आसान समाधान मैं लागू किया इस प्रकार थी:

SELECT 
name, 
TO_DATE(date1, 'DD-MON-YYYY HH:MI AM') 
FROM TableX 

UNION 

SELECT 
name, 
TO_DATE(date2, 'DD-MON-YYYY HH:MI AM') 
FROM TableY 

ORDER BY 2 DESC; 

इस आदेश दूसरे (दिनांक) कॉलम के परिणाम।

यदि दिनांक कॉलम एक स्ट्रिंग है, तो आप ऊपर दिखाए गए TO_DATE फ़ंक्शन को लागू कर सकते हैं, अन्यथा यह आवश्यक नहीं है।

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