একাধিক তারিখের ব্যাপ্তি ব্যবহার করে ডেটা গণনা করুন


14

সম্ভবত এটি আগে জিজ্ঞাসা করা হয়েছিল, কিন্তু আমি তা বুঝতে পারি না। আমার একটি phone_clicksটেবিল রয়েছে (বর্গফুট ফ্রেড http://sqlfiddle.com/#!15/855e0/1 )

CREATE TABLE phone_clicks (
    id integer NOT NULL,
    date date NOT NULL,
    industry_id integer NOT NULL,
    clicks integer DEFAULT 0 NOT NULL
);

insert into phone_clicks(id, date, industry_id, clicks)
values
(1, '2015-03-16', 1, 15),
(2, '2015-03-16', 2, 7),
(3, '2015-03-16', 3, 0),
(4, '2015-03-17', 1, 12),
(5, '2015-03-17', 3, 4),
(6, '2015-03-17', 4, 22),
(7, '2015-03-18', 1, 19),
(8, '2015-03-18', 2, 35);

এই টেবিলটিতে একাধিক ইন্ডাস্ট্রি_আইডি এবং তারিখের জন্য ফোন ক্লিক ইভেন্টের গণনা রয়েছে।

শর্ত হিসাবে একাধিক তারিখের রেঞ্জ সহ সমস্ত উপলভ্য শিল্প_আইডির জন্য এই ক্লিকগুলি গণনা করা কি সম্ভব? আমি এই আউটপুট পেতে চাই:

------------------------------------------------
industry_id |  today | yesterday | last 3 days |
------------------------------------------------
1           |  19    | 12        | 46          |
------------------------------------------------
2           |  35    | 0         | 42          |
------------------------------------------------
3           |  0     | 4         | 4           |
------------------------------------------------
4           |  0     | 22        | 22          |
------------------------------------------------

আমি তারিখ অনুসারে বিভাজন সহ গণনা ব্যবহার করার চেষ্টা করেছি, কিন্তু কোথাও পাইনি। একটি কোয়েরিতে এই ডেটাটি নির্বাচন করা কি সম্ভব? অতিরিক্ত সুবিধা হ'ল তারিখের সীমা হিসাবে পূর্ববর্তী মাসগুলি নির্দিষ্ট করতে সক্ষম হবেন: আজ, গতকাল, মার্চ, ফেব্রুয়ারি, জানুয়ারী ইত্যাদি

আপডেট : আমি চলমান মাস, পূর্ববর্তী মাসগুলি এবং পূর্ব-পূর্বের মাসটিকে তারিখের সীমা হিসাবে নির্ধারণ করতে ফিডল আপডেট করেছি। এসকিউএল ফিডল: http://sqlfiddle.com/#!15/855e0/46

আমি PostgreSQL 9.3 ব্যবহার করছি, তবে 9.4 সমাধানগুলি স্বাগত, কারণ আমরা শীঘ্রই এটিতে স্থানান্তরিত হব।

উত্তর:



7

9.4 সংস্করণে, আমরা এই FILTERধারাটি ব্যবহার করতে সক্ষম হব :

select  
    t.industry_id,
    sum(t.clicks) filter (where t.date = current_date) 
        as today,
    sum(t.clicks) filter (where t.date = current_date - interval '1 day')
        as yesterday,
    sum(t.clicks) filter (where t.date >= current_date - interval '2 days'
                            and t.date <= current_date) 
        as last_3_days
from 
    phone_clicks as t
group by 
    t.industry_id ;

এসকিউএলফিডেলে চেষ্টা করা হয়েছে ।


দেখতে আরও ভাল, ফিল্টার দুর্দান্ত সিনট্যাকটিক চিনি! ক্যোয়ারী ধরে নিয়েছে dateএটি একটি কলামের ধরণের dateএবং এটির নয় timestamp। এই অনুমানটি আমাকে মাঝে মাঝে
জ্বলিয়ে

1
@ অ্যান্ডোমার, হ্যাঁ, আমার কাছে সাধারণত তারিখ / তারিখের সময় / টাইমস্ট্যাম্প ক্যোয়ারিতে ওপেন-ক্লোজড রেঞ্জ থাকে। ডেটা ধরণের পরিবর্তন দ্বারা দংশন করা আরও কঠিন।
ypercubeᵀᴹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.