2012-03-07 9 views
13
X Y DATE 
1 20 20120101 
1 21 20120101 
2 30 20120201 
3 40 20120201 
3 41 20120301 

मैं किसी भी पंक्तियों एक और पंक्ति जहां एक्स एक ही है कि चयन करना चाहते हैं में पंक्तियों को एक स्तंभ में ही कर रहे हैं का चयन, लेकिन अलग अलग किया, लेकिन आज अलग है, यानी इस सवाल का जवाब होगाएक और

3 40 20120201 
3 41 20120301 
+0

जो डेटाबेस और संस्करण? –

+0

माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 (एसपी 1) - 10.0.2531.0 (एक्स 64) मार्च 2 9 200 9 10:11:52 कॉपीराइट (सी) 1 9 88-2008 माइक्रोसॉफ्ट कॉर्पोरेशन डेवलपर संस्करण (64-बिट) विंडोज एनटी 6.0 पर (बिल्ड 6002: सर्विस पैक 2) .... क्यूं कर? – gmaximus

+0

क्योंकि मेरा एसक्यूएल केवल SQL+ 2008+ से काम करेगा। –

उत्तर

20

इस प्रयास करें ...

SELECT * 
FROM YourTable 
WHERE X IN (
    SELECT T1.X 
    FROM YourTable T1 INNER JOIN 
     YourTable T2 ON T1.X = T2.X 
    WHERE T1.DATE <> T2.DATE 
); 

यह सबसे एएनएसआई अनुरूप डेटाबेस उत्पादों में काम करना चाहिए।

+0

यह एक कामकाजी उत्तर है, मेरे विक्रेता के एसक्यूएल कार्यान्वयन से नेस्टेड चयनों की अनुमति नहीं है - लेकिन मैं – gmaximus

+0

सहायता की सराहना करता हूं, मुझे वास्तव में लगता है कि मैं अभी भी थोड़ा उलझन में हूं, क्या आप ऊपर दिए गए एक्स और वाई कॉलम के लिए उत्तर दे सकते हैं सवाल, 'जो एक ही वाई और अलग एक्स' है? – gmaximus

+2

@gmaximus: आपने एसक्यूएल-सर्वर -2008 के साथ अपना प्रश्न टैग किया है, और आपने कहा था कि आप SQL Server 2008 का उपयोग कर रहे थे। तो जब आप कहते हैं कि आपका विक्रेता का एसक्यूएल कार्यान्वयन नेस्टेड चयन की अनुमति नहीं देता है तो आपका क्या मतलब है? एसक्यूएल सर्वर 2008 निश्चित रूप से नेस्टेड चयन की अनुमति देता है। –

2
select distinct t1.* 
    from table t1 
    join table t2 
    on (t1.X = t2.X and t1.date <> t2.date); 
+0

@Yuck मुझे इसका परीक्षण करने का अवसर नहीं है, लेकिन क्या आपका यकीन है? ऐसा लगता है कि इस प्रश्न को परिणाम की आवश्यकता होनी चाहिए। –

+0

@Yuck मैंने इसका परीक्षण किया और यह ठीक काम करता है। –

+0

'table' एक SQL कीवर्ड है, जो इसे चलने से रोक देगा। आप वास्तव में परीक्षण करने के लिए क्या चलाया? और कौन सा आरडीबीएमएस? – Yuck

0
declare @t table(X int, Y int, DATE CHAR(8)) 
insert @t values 
(1, 20, '20120101'), 
(1, 21, '20120101'), 
(2, 30, '20120201'), 
(3, 40, '20120201'), 
(3, 41, '20120301') 

select x,y, date, maxy, miny from 
(
    select *, max(date) over (partition by x) maxdate, 
    min(date) over (partition by x) mindate 
    from @t 
) a 
where mindate <> maxdate