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

पिछली 4 तिमाहियों का डेटा दिखाने वाला दृश्य कैसे बनाएं?

हम्म। अगर मैं "पिछली चार तिमाहियों" को "आखिरी चार तिमाहियों जो डेटा में हैं" के रूप में व्याख्या करता हूं, तो यहां एक विधि है।

सबसे पहले, आप निम्न कार्य करके चार तिमाहियों को प्राप्त कर सकते हैं:

select distinct p_year, p_quarter
from production p
order by p_year desc, p_quarter desc
limit 4;

आप चरों का उपयोग करके उनकी गणना कर सकते हैं:

select p_year, p_quarter, (@rn := @rn + 1) as enum
from (select distinct p_year, p_quarter
      from production p
      order by p_year desc, p_quarter desc
      limit 4
     ) p cross join
     (select @rn := 0) params

फिर, आप डेटा को पिवट करने के लिए एक क्वेरी में इसका उपयोग कर सकते हैं:

select p.person_id,
       sum(case when seqnum = 1 then num else 0 end) as num_quarter_1,
       sum(case when seqnum = 2 then num else 0 end) as num_quarter_2,
       sum(case when seqnum = 3 then num else 0 end) as num_quarter_3,
       sum(case when seqnum = 4 then num else 0 end) as num_quarter_4
from production p join
     (select p_year, p_quarter, (@rn := @rn + 1) as seqnum
      from (select distinct p_year, p_quarter
            from production p
            order by p_year desc, p_quarter desc
            limit 4
           ) p cross join
           (select @rn := 0) params
     ) yq
     using (p_year, p_quarter)
group by p.person_id;

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

यदि आप वर्तमान तिमाही के आधार पर तिमाहियों को परिभाषित कर रहे हैं, तो आप कुछ ऐसा ही कर सकते हैं:

select p.person_id,
       sum(case when seqnum = 1 then num else 0 end) as num_quarter_1,
       sum(case when seqnum = 2 then num else 0 end) as num_quarter_2,
       sum(case when seqnum = 3 then num else 0 end) as num_quarter_3,
       sum(case when seqnum = 4 then num else 0 end) as num_quarter_4
from production p join
     (select year(curdate()) as p_year, quarter(curdate()) as p_quarter, 1 as seqnum union all
      select year(curdate() - interval 1 quarter) as p_year, month(curdate() - interval 1 quarter) as p_quarter, 2 as seqnum union all
      select year(curdate() - interval 2 quarter) as p_year, month(curdate() - interval 2 quarter) as p_quarter, 3 as seqnum union all
      select year(curdate() - interval 2 quarter) as p_year, month(curdate() - interval 3 quarter) as p_quarter, 4 as seqnum           
     ) yq
     using (p_year, p_quarter)
group by p.person_id;

अन्य दृष्टिकोण भी हैं, जैसे:

select person_id,
       sum(case when year(curdate()) = p_year and quarter(curdate()) = p_quarter
                then num else 0
           end) as num_quarter_1,
       sum(case when year(curdate() - interval 1 quarter) = p_year and quarter(curdate() - interval 1 quarter) = p_quarter
                then num else 0
           end) as num_quarter_2,
       sum(case when year(curdate() - interval 2 quarter) = p_year and quarter(curdate() - interval 2 quarter) = p_quarter
                then num else 0
           end) as num_quarter_3,
       sum(case when year(curdate() - interval 3 quarter) = p_year and quarter(curdate() - interval 3 quarter) = p_quarter
                then num else 0
           end) as num_quarter_4
from production p
group by person_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 group_concat के बराबर प्रेस्टो

  2. MySQL:mysql निर्देशिका का स्वामित्व linux सर्वर रिबूट पर 'service_account' से 'mysql' में बदल जाता है

  3. डेटाबेस/एसक्यूएल:देशांतर/अक्षांश डेटा कैसे स्टोर करें?

  4. सर्वर पर एकाधिक फ़ाइलें अपलोड करें, और डेटाबेस पर लिखें

  5. मैसकल रेस कंडीशन से ठीक से कैसे बचें