Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MYSQL में समय अंतराल के आधार पर पंक्तियों को कॉलम में कैसे स्थानांतरित करें

एक विधि lag() . का उपयोग करती है :

select t.*
from (select t.*,
             lag(status) over (partition by val, name order by date) as prev_status
      from t
     ) t
where status = 'open' and
      (prev_status is null or prev_status <> 'open');

यह एक परीक्षण के लिए एक से अधिक परिणाम लौटा सकता है, यदि स्थिति 'open' पर "वापस" हो सकती है . आप row_number() . का उपयोग कर सकते हैं अगर आप यह व्यवहार नहीं चाहते हैं:

select t.*
from (select t.*,
             row_number() over (partition by val, name, status order by date) as seqnum
      from t
     ) t
where status = 'open' and seqnum = 1;

संपादित करें:

(समायोजित डेटा के लिए)

आप केवल सशर्त एकत्रीकरण का उपयोग कर सकते हैं:

select val, name,
       min(case when status = 'open' then status end) as o_gate,
       min(case when status = 'open' then dt end) as o_dt,
       max(case when status = 'close' then status end) as c_gate,
       max(case when status = 'close' then dt end) as c_dt,
from t
group by val, name;

यहां एक डीबी है<>बेला

यदि आप id का पुनर्निर्माण करना चाहते हैं , आप एक व्यंजक का उपयोग कर सकते हैं जैसे:

row_number() over (order by min(dt)) as id



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - सबक्वेरी के आधार पर मान अपडेट करें

  2. MySQL में करंट कनेक्शन के लिए लोकेल कैसे सेट करें

  3. बिना किसी सीमा के mysql में तीसरा उच्चतम वेतन ढूँढना

  4. MYSQL - विभिन्न डेटाबेस से चुनें

  5. मैसकल क्वेरी डुप्लिकेट वर्डप्रेस टिप्पणियों को हटाने के लिए?