স্কেল ব্যবহার করে তারিখ ক্ষেত্র থেকে মাসের মধ্যে কীভাবে গ্রুপ করবেন


88

আমি কীভাবে কেবল তারিখের ক্ষেত্র থেকে মাসের মধ্যে গ্রুপ করব (এবং দিনের সাথে গ্রুপ করব না)?

এখানে আমার তারিখের ক্ষেত্রটি দেখতে কেমন:

2012-05-01

এখানে আমার বর্তমান এসকিউএল:

select  Closing_Date, Category,  COUNT(Status)TotalCount from  MyTable
where Closing_Date >= '2012-02-01' and Closing_Date <= '2012-12-31'
and Defect_Status1 is not null
group by  Closing_Date, Category

উত্তর:


113

আমি এটি ব্যবহার করব:

SELECT  Closing_Date = DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), 
        Category,  
        COUNT(Status) TotalCount 
FROM    MyTable
WHERE   Closing_Date >= '2012-02-01' 
AND     Closing_Date <= '2012-12-31'
AND     Defect_Status1 IS NOT NULL
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), Category;

এটি প্রতি মাসের প্রথম দিকে গ্রুপ হবে so

`DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130128'), 0)` 

দেব '20130101'। তারিখ হিসাবে তারিখ রাখার কারণে আমি সাধারণত এই পদ্ধতিটি পছন্দ করি।

বিকল্পভাবে আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

SELECT  Closing_Year = DATEPART(YEAR, Closing_Date),
        Closing_Month = DATEPART(MONTH, Closing_Date),
        Category,  
        COUNT(Status) TotalCount 
FROM    MyTable
WHERE   Closing_Date >= '2012-02-01' 
AND     Closing_Date <= '2012-12-31'
AND     Defect_Status1 IS NOT NULL
GROUP BY DATEPART(YEAR, Closing_Date), DATEPART(MONTH, Closing_Date), Category;

এটি আপনার কাঙ্ক্ষিত আউটপুটটি আসলে নির্ভর করে। (সমাপ্তির বছরটি আপনার উদাহরণে প্রয়োজনীয় নয়, তবে তারিখের সীমাটি যদি এক বছরের সীমানা অতিক্রম করে তবে তা হতে পারে)।


গ্যারেথডি, ধন্যবাদ ম্যান উভয় পদ্ধতিই ভাল কাজ করেছে worked আমি এক ক্ষেত্রের মধ্যে বছর এবং মাস উভয়কে একসাথে গ্রুপ করতে পারি এমন উপায় আছে কি? এই ফর্ম্যাটটির মতো দেখানোর অর্থ: ডিসেম্বর -12 (ডিসেম্বর মাস এবং 12 বছর হয়)। ধন্যবাদ
ব্যবহারকারী 1858332

প্রথম পদ্ধতিটি এটি করবে, আপনার কেবল কলামটি ফর্ম্যাট করতে হবে। আমি এসকিউএল এর বাইরে এটি করার পরামর্শ দেব, তবে এটি যদি এমনভাবে করা হয় তবে আপনি এর মতো কিছু ব্যবহার করতে পারেনSELECT STUFF(SUBSTRING(CONVERT(VARCHAR, CURRENT_TIMESTAMP, 6), 4, 6), 4, 1, '-');
গ্যারেথডি

@ গ্যারেথডি আপনি কীভাবে 0 এবং তারিখের মধ্যে ডেটেডিফটি ব্যবহার করবেন তা ব্যাখ্যা করতে পেরেছিলেন? 0 কোনও তারিখ নয়।
ইরফান্দার

4
এবং ক্লোসিং_সেট = ডেটএইডিডিডি (মাস, ডেটেডিএফ (মাস, 0, সমাপনী_ তারিখ), 0) কেবলমাত্র ডেটএইডিডিডি (মাস, ডেটিডিএফ (মাস, 0, সমাপনী_ তারিখ), 0)
ইফফারদার

4
@irfandar 0 তারিখ নয়, তবে এসকিউএল-সার্ভার স্পষ্টতই এটিকে 1 লা জানুয়ারী 1900 এ রূপান্তরিত করে your আপনার দ্বিতীয় প্রশ্নের Closing_Date =জন্য কেবল কলামের নাম, এটি AS Closing_Dateপ্রকাশের পরে থাকার মতো । এটি সম্পূর্ণরূপে ইতিবাচক কিন্তু আমি ব্যক্তিগতভাবে এটি alias =স্বরলিপি অনেক সহজ তুলনায় পড়তে AS Alias। আমি কেন এড়োন বার্ট্র্যান্ডের এই নিবন্ধটি পড়তে পছন্দ করি সে সম্পর্কে আরও তথ্যের জন্য ।
গ্যারেথডি

42

তারিখ থেকে মাসটি বের করতে DATEPART ফাংশনটি ব্যবহার করুন ।

সুতরাং আপনি এই জাতীয় কিছু করতে হবে:

SELECT DATEPART(month, Closing_Date) AS Closing_Month, COUNT(Status) AS TotalCount
FROM t
GROUP BY DATEPART(month, Closing_Date)

16
মাইএসকিএল
ফ্রেজাররা

আপনি যদি প্রায়শই এই ক্যোয়ারী চালান তবে উপযুক্ত সূচক তৈরি করতে বিবেচনা করুন।
ব্যবহারকারী_0

সহজ উত্তরের জন্য প্লাস 1।
বার্ডেমে

10
এটি বিভিন্ন বছর থেকে একই মাসগুলি বিবেচনা করবে - যা সাধারণত প্রত্যাশিত ছিল না।
ivan_pozdeev

এটি জানুয়ারী ইত্যাদির জন্য "1" রাখে It এটি আপনাকে মাসের নামটি বলে না
user890332

15

এটি সম্পাদন করার জন্য আমি ফরমেট ফাংশনটি ব্যবহার করেছি :

select
 FORMAT(Closing_Date, 'yyyy_MM') AS Closing_Month
 , count(*) cc 
FROM
 MyTable
WHERE
 Defect_Status1 IS NOT NULL
 AND Closing_Date >= '2011-12-01'
 AND Closing_Date < '2016-07-01' 
GROUP BY FORMAT(Closing_Date, 'yyyy_MM')
ORDER BY Closing_Month

9

যোগ করে MONTH(date_column)GROUP BY

SELECT Closing_Date, Category,  COUNT(Status)TotalCount
FROM   MyTable
WHERE  Closing_Date >= '2012-02-01' AND Closing_Date <= '2012-12-31'
AND    Defect_Status1 IS NOT NULL
GROUP BY MONTH(Closing_Date), Category

1

তারিখ পার্ট ফাংশন মাইএসকিউএল 5.6 এ কাজ করে না, পরিবর্তে মাস ব্যবহার করুন ('2018-01-01')


1

এটা চেষ্টা কর:

select min(closing_date), date_part('month',closing_date) || '-' || date_part('year',closing_date) AS month,
Category, COUNT(Status)TotalCount 
FROM MyTable
where Closing_Date >= '2012-02-01' AND Closing_Date <= '2012-12-31'
AND Defect_Status1 is not null
GROUP BY month, Category,
ORDER BY 1

এইভাবে আপনি একটি সংক্ষিপ্ত তারিখের ফর্ম্যাট অনুসারে গোষ্ঠী করছেন, এর মাধ্যমে যোগদান করেছেন -


0
SELECT  to_char(Closing_Date,'MM'), 
        Category,  
        COUNT(Status) TotalCount 
FROM    MyTable
WHERE   Closing_Date >= '2012-02-01' 
AND     Closing_Date <= '2012-12-31'
AND     Defect_Status1 IS NOT NULL
GROUP BY Category;

0

উপরে এসকিউএল সার্ভার 2012 সংস্করণ,

SELECT  format(Closing_Date,'yyyy-MM') as ClosingMonth,
        Category,  
        COUNT(Status) TotalCount 
FROM    MyTable
WHERE   Closing_Date >= '2012-02-01' 
AND     Closing_Date <= '2012-12-31'
AND     Defect_Status1 IS NOT NULL
GROUP BY format(Closing_Date,'yyyy-MM'), Category;

-1

আপনি বছর (), মাস () দিন () এবং ডেট পার্ট () ব্যবহার করে এটি করতে পারেন।

আপনার উদাহরণে এটি হবে:

select  Closing_Date, Category,  COUNT(Status)TotalCount from  MyTable
where Closing_Date >= '2012-02-01' and Closing_Date <= '2012-12-31' 
and Defect_Status1 is not null 
group by Year(Closing_Date), Month(Closing_Date), Category

এটি বৈধ এসকিউএল নয়
ম্যাড ইচেট

আচ্ছা এটি বৈধ তবে আপনার পছন্দসই ক্ষেত্রগুলিতে দলবদ্ধ না হওয়ায় অপ্রত্যাশিত ফলাফল আনবে। তারিখ এবং বছর একই হ'ল আপনার সমাপ্তির তারিখের কোনও মান থাকতে পারে।
ম্যাড ইচেট

-1

নিম্নলিখিত কোড ব্যবহার করে দেখুন

SELECT  Closing_Date = DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), 
        Category,  
        COUNT(Status) TotalCount 
FROM    MyTable
WHERE   Closing_Date >= '2012-02-01' 
AND     Closing_Date <= '2012-12-31'
AND     Defect_Status1 IS NOT NULL
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), Category;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.