टेबल

छवि में तालिका से, मैं पहली बार एक DEVID प्रकट होने का चयन करना चाहता हूं और हर बार DEVID का सेंसरटाइप बदलता है। तो सभी पीली पंक्तियाँ। मुझे यह परिणाम प्राप्त करने के लिए अलग-अलग एसक्यूएल प्रश्न मिले, क्या कोई उन्हें संयोजित करने में मदद कर सकता है।

पहला परिणाम DEVID->

 select * from
    (select *, row_number() over 
         (partition by devid order by MSGID ASC) as TopOne from RAWDATA
    ) T
where T.TopOne = 1;

DEVID का सेंसरटाइप बदलें ->

SELECT a.*
FROM rawdata AS a
WHERE a.SENSORTYPE <>
      ( SELECT b.SENSORTYPE
        FROM rawdata AS b
        WHERE b.DEVID = a.DEVID
          AND a.MSGID > b.MSGID
        ORDER BY b.MSGID DESC
        LIMIT 1);
0
Meng 14 अक्टूबर 2019, 15:09
1
हमें कुछ नमूना तालिका डेटा और अपेक्षित परिणाम दिखाएं - सभी स्वरूपित पाठ के रूप में, छवियों के रूप में नहीं। और न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण पर भी एक नज़र डालें।
 – 
jarlh
14 अक्टूबर 2019, 15:11

2 जवाब

सबसे बढ़िया उत्तर

dense_rank कार्य करने का प्रयास करें

select r.*
from (select r.*,
             dense_rank(sensortype) over (partition by devid order by id) as top_sensortype
      from rawdata r
     ) r
where top_sensortype=1
1
Kiran Patil 14 अक्टूबर 2019, 15:26

ऐसा लगता है कि आप lag() चाहते हैं:

select r.*
from (select r.*,
             lag(sensortype) over (partition by devid order by id) as prev_sensortype
      from rawdata r
     ) r
where prev_sensortype is null or prev_sensortype <> sensortype;
0
Gordon Linoff 14 अक्टूबर 2019, 15:11