मेरे पास एक छोटा सा एप्लिकेशन है जो कोडइग्निटर 3 के साथ बनाया गया था और एक रिपोर्ट करने की जरूरत है जिसे चार्ट.जेएस में परिवर्तित कर दिया जाएगा। रिपोर्ट वार्षिक आधार पर होनी चाहिए लेकिन हर महीने दी गई विशिष्ट तिथि पर। आवश्यकता सभी डेटा गणना मासिक 4 से 3 तक होनी चाहिए। इस कदर:

उदाहरण के लिए जनवरी की रिपोर्ट 4 जनवरी से 3 फरवरी, 4 फरवरी से 3 मार्च,... इत्यादि की होगी।

मैंने एक MySQL क्वेरी बनाई है, लेकिन मैं इस बात पर अड़ा हुआ हूं कि तारीख को भी कैसे प्राप्त किया जाए। मेरी क्वेरी इस प्रकार है:

SELECT DATE_FORMAT(odd_date_created, '%Y') as 'year',
DATE_FORMAT(odd_date_created, '%m') as 'month',
COUNT(odd_id) as 'total', status
FROM odd_data 
WHERE status = $id and 
GROUP BY DATE_FORMAT(odd_date_created, '%Y%m'), status

मैं MySQl के लिए नया हूँ। क्या कोई इस पर मेरी मदद कर सकता है। मैं अटक गया हूं कि मुझे तारीख की तारीख कहां रखनी चाहिए।

2
Azman Ishak 14 नवम्बर 2017, 03:56

2 जवाब

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

सबसे पहले मैं आपको सावधान करना चाहता हूं कि जब आप अपने डेटा में शामिल होने के लिए आते हैं तो निम्न के साथ "बीच" का उपयोग न करें, इसके बजाय इस विधि का उपयोग करें data.date >= r.period_start_dt and data.date < r.period_end_dt

दूसरा, मैं मान रहा हूं कि आपके डेटा में दिनांक या टाइमस्टैम्प हैं और यह गणना की गई श्रेणियों के बीच होगा:

set @year :=2017;

select
       *
from (
        select 
               start_dt + INTERVAL m.n MONTH     period_start_dt
             , start_dt + INTERVAL m.n + 1 MONTH period_end_dt
        from (
               select str_to_date(concat(@year,'-01-04'),'%Y-%m-%d') start_dt ) seed
        cross join (select 0 n union all
                    select 1 union all
                    select 2 union all
                    select 3 union all
                    select 4 union all
                    select 5 union all
                    select 6 union all
                    select 7 union all
                    select 8 union all
                    select 9 union all
                    select 10 union all
                    select 11
                   ) m
     ) r
## LEFT JOIN YOUR DATA
## ON data.date >= r.period_start_dt and data.date < r.period_end_dt

उदाहरण श्रेणियां: (इस डेमो में आप खुद तैयार करें: http://rextester.com/CHTKSA95303 )

nb dd.mm.yyyy (.de format)
+----+---------------------+---------------------+
|    |   period_start_dt   |    period_end_dt    |
+----+---------------------+---------------------+
|  1 | 04.01.2017 00:00:00 | 04.02.2017 00:00:00 |
|  2 | 04.02.2017 00:00:00 | 04.03.2017 00:00:00 |
|  3 | 04.03.2017 00:00:00 | 04.04.2017 00:00:00 |
|  4 | 04.04.2017 00:00:00 | 04.05.2017 00:00:00 |
|  5 | 04.05.2017 00:00:00 | 04.06.2017 00:00:00 |
|  6 | 04.06.2017 00:00:00 | 04.07.2017 00:00:00 |
|  7 | 04.07.2017 00:00:00 | 04.08.2017 00:00:00 |
|  8 | 04.08.2017 00:00:00 | 04.09.2017 00:00:00 |
|  9 | 04.09.2017 00:00:00 | 04.10.2017 00:00:00 |
| 10 | 04.10.2017 00:00:00 | 04.11.2017 00:00:00 |
| 11 | 04.11.2017 00:00:00 | 04.12.2017 00:00:00 |
| 12 | 04.12.2017 00:00:00 | 04.01.2018 00:00:00 |
+----+---------------------+---------------------+
1
Used_By_Already 14 नवम्बर 2017, 05:46

विनिर्देश को देखते हुए, मुझे लगता है कि मैं इसे धोखा देने का लुत्फ उठाऊंगा ... तारीख से 3 दिन घटाएं। ऐसा करने पर, 4 जनवरी से 1 जनवरी तक, 3 फरवरी को वापस 31 जनवरी तक... इसलिए वे सभी जनवरी के रूप में समाप्त हो जाते हैं।

  SELECT DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%Y') AS `year`
       , DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%m') AS `month`
       , ...
    FROM ...

   GROUP
      BY DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%Y')
       , DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%m')

ऑडबॉल रेंज होने पर यह अलग हो जाता है... अगर यह हमेशा चौथा और तीसरा नहीं होता है।

1
spencer7593 14 नवम्बर 2017, 05:28