টাইমস্ট্যাম্প বিরতি 10 মিনিট পোস্টগ্রেএসকিউএল দ্বারা বন্ধ [বন্ধ]


10

আমার 10 মিনিটের ব্যবধানে বিচ্ছিন্ন সময়ের জন্য গ্রুপ করতে হবে।

আমার নীচে এই ক্যোয়ারী রয়েছে যা আমাকে একটি ফলাফল সেট প্রদান করে:

SELECT timestamp
    FROM table_1, table_2_shape_polygon
    WHERE ST_Within(earthnetworks_geometry_raios, poligono_geometry)
      AND timestamp 
      BETWEEN '2013-04-07 15:30:00' AND '2013-04-07 16:50:00'
      AND type = 0
      AND id_polygon = 2

আমার ফলাফল সেটটি এরকম:

"2013-04-07 15:30:55"
"2013-04-07 15:32:52"
"2013-04-07 15:32:52"
"2013-04-07 15:34:21"
"2013-04-07 15:39:09"
"2013-04-07 16:24:25"
"2013-04-07 16:29:58"
"2013-04-07 16:33:22"
"2013-04-07 16:34:30"
"2013-04-07 16:35:09"
"2013-04-07 16:36:54"
"2013-04-07 16:38:40"
"2013-04-07 16:39:37"
"2013-04-07 16:39:37"
"2013-04-07 16:39:38"
"2013-04-07 16:39:38"
"2013-04-07 16:39:44"
"2013-04-07 16:39:56"
"2013-04-07 16:40:03"
"2013-04-07 16:40:04"
"2013-04-07 16:41:22"
"2013-04-07 16:41:27"
"2013-04-07 16:41:38"
"2013-04-07 16:41:38"
"2013-04-07 16:42:24"
"2013-04-07 16:42:39"
"2013-04-07 16:45:00"
"2013-04-07 16:45:40"
"2013-04-07 16:49:43"

আমার একটি পিরিয়ডের মধ্যে সমস্ত টাইমস্ট্যাম্প রয়েছে তবে প্রতি 10 মিনিটে আমার এটি গ্রুপ করা দরকার এবং কীভাবে তা আমার কোনও ধারণা নেই। আমি চেষ্টা করেছি date_truncযা আমার যথাযথভাবে প্রয়োজন নেই।

প্রাক্তন: মধ্যে 2013-04-07 15:30:00, 2013-04-07 15:40:00 5 results

কিভাবে আমি এটি করতে পারব?


আমি এটি চেষ্টা করেছিলাম এবং এটি প্রত্যাশার মতো কার্যকর হয়নি।

SELECT
    timestamp 'epoch' +
    INTERVAL '1 second' * round((extract('epoch' from earthnetworks_dt_horario) / 600) * 600) as horario,
    count(earthnetworks_dt_horario)
FROM raios.earthnetworks, raios.earthnetworks_teste_poligono
WHERE ST_Within(earthnetworks_geometry_raios, poligono_geometry)
      AND earthnetworks_dt_horario 
      BETWEEN '2013-04-07 15:30:00' AND '2013-04-07 16:50:00'
      AND earthnetworks_num_tipo = 0
      AND id_poligono = 2
GROUP BY 
round(extract('epoch' from earthnetworks_dt_horario) / 600), earthnetworks_dt_horario

এটি গোষ্ঠীভুক্ত ফলাফল সেট নয়:

"2013-04-07 16:29:58";1
"2013-04-07 16:34:30";1
"2013-04-07 16:33:22";1
"2013-04-07 16:39:44";1
"2013-04-07 16:39:56";1
"2013-04-07 16:42:24";1
"2013-04-07 16:41:38";2
"2013-04-07 16:24:25";1
"2013-04-07 16:39:38";2
"2013-04-07 16:42:39";1
"2013-04-07 16:41:27";1
"2013-04-07 16:36:54";1
"2013-04-07 16:45:00";1
"2013-04-07 16:40:04";1
"2013-04-07 16:40:03";1
"2013-04-07 15:34:21";1
"2013-04-07 15:30:55";1
"2013-04-07 15:39:09";1
"2013-04-07 16:49:43";1
"2013-04-07 16:45:40";1
"2013-04-07 16:35:09";1
"2013-04-07 16:38:40";1
"2013-04-07 16:39:37";2
"2013-04-07 16:41:22";1
"2013-04-07 15:32:52";2

এটা কাজ করে না.

উত্তর:


14

আপনি PostgreSQL এর জন্য এটি ব্যবহার করতে পারেন। 600 সেকেন্ডে 10 মিনিট। ধারণাটি হ'ল টাইমস্ট্যাম্পকে যুগে রূপান্তরিত করা, মিনিটের মধ্যে পছন্দসই বিরতিতে বিভক্ত হয়ে কাঙ্ক্ষিত ব্যবধানটি পেতে গোল করতে হবে

SELECT COUNT(*) cnt, 
to_timestamp(floor((extract('epoch' from timestamp_column) / 600 )) * 600) 
AT TIME ZONE 'UTC' as interval_alias
FROM TABLE_NAME GROUP BY interval_alias

2

আপনি এই উত্তরটি 300 দ্বারা 600 দ্বারা প্রতিস্থাপন করে ব্যবহার করতে পারেন (10 মিনিটের মধ্যে সেকেন্ডের সংখ্যা)


2

কয়েকটি কার্যকর ডেটটাইম ফাংশন রয়েছে । প্রথমে date_truncপ্রতিটি ঘন্টা সহ টাইমস্ট্যাম্পগুলি ডিকনস্ট্রাক্ট করুন , তারপরে date_partএকটি বিরতি তৈরির জন্য মিনিটগুলি সহ কিছুটা পূর্ণসংখ্যা বিভাগ করুন , যা পুনরায় সংযুক্ত হয়।

SELECT COUNT(*), 
    date_trunc('hour', timestamp) +
    (((date_part('minute', ts)::integer / 10::integer) * 10::integer)
     || ' minutes')::interval AS ten_min_timestamp
FROM sometable_or_joins_or_whatever
GROUP BY ten_min_timestamp;

এটি সমস্ত শর্তের সাথে ভালভাবে কাজ করে, অবশ্যই উর্ধ্বতন হওয়া উচিত। তবে কেন || ' minutes'ব্যবহার করা হয়েছে তা সম্পর্কে আমি নিশ্চিত নই date_part
বিশাল শেঠি

integer || 'minutes'একটি বিরতি টাইপ তৈরি করতে ব্যবহৃত হয়, উদাহরণস্বরূপ "8 মিনিট", যা টাইমস্ট্যাম্পে যুক্ত হয়।
মাইক টি

1

টাইমস্ট্যাম্প দ্বারা দলবদ্ধ করে আমি মাইএসকিউএলে অনুরূপ কিছু করেছি - MOD(timestamp, 600)যার রিটার্ন মান 10 মিনিটের (600 সেকেন্ড) ইন্টিভালের মধ্যে সমস্ত টাইমস্ট্যাম্পগুলির জন্য একই হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.