আন্তঃসীমানক সারিগুলির মধ্যে একই কলামে খেজুরের বিস্তারের পার্থক্যকে আপনি সর্বোত্তমভাবে কীভাবে যোগ করতে পারেন? আমার একটি ডেটটাইম কলাম আছে এবং সারিগুলির মধ্যে পার্থক্য গণনা করতে চাই। আমি সেকেন্ডে পার্থক্য চাই। এই প্রশ্নাগুলি কীভাবে 2 টাইমস্ট্যাম্পগুলির মধ্যে পার্থক্য পাওয়া যায় সে সম্পর্কে নয়, তবে একই টেবিলে সারিগুলির মধ্যে সর্বাধিক দক্ষতার সাথে কীভাবে গণনা করা যায় সে সম্পর্কে আরও মনোনিবেশ করা হয়। আমার ক্ষেত্রে প্রতিটি সারিতে একটি ডেটটাইম ইভেন্ট টাইপ থাকে যা 2 টি সারি যুক্ত করে যুক্ত করে।
শুরু এবং শেষের ইভেন্টটিপগুলি কীভাবে গ্রুপ করা যায় সে সম্পর্কিত বিশদ। (অ্যান্ড্রি এম এর প্রশ্ন) শুরু এবং সমাপ্তি "একটানা" হওয়া উচিত। যদি কোনও সূচনার পরবর্তী প্রান্ত না থাকে তবে এটি যোগফলের বাইরে রেখে দেওয়া উচিত। এর শেষ আছে কিনা তা দেখতে পরবর্তী স্টার্টে সরানো। কেবল একটানা শুরু - মোট জোড়গুলি মোট সেকেন্ডের যোগে যুক্ত করা উচিত।
পোস্টগ্র্যাস্কল 9.x এ কাজ করা ...
সারণীতে ডেটা উদাহরণ;
eventtype, eventdate
START, 2015-01-01 14:00
END, 2015-01-01 14:25
START, 2015-01-01 14:30
END, 2015-01-01 14:43
START, 2015-01-01 14:45
END, 2015-01-01 14:49
START, 2015-01-01 14:52
END, 2015-01-01 14:55
দ্রষ্টব্য, সমস্ত সূচনা এবং শেষ তারিখগুলি ক্রমিক হবে।
এই আমার প্রথম প্রচেষ্টা। কাজ করছে বলে মনে হচ্ছে।
SELECT
-- starts.*
SUM(EXTRACT(EPOCH FROM (eventdate_next - eventdate))) AS duration_seconds
FROM
(
WITH x AS (
SELECT *, dense_rank() OVER (ORDER BY eventdate) AS rnk
FROM table
AND eventdate > '2015-01-01 00:00:00.00'
AND eventdate < '2016-01-01 23:59:59.59'
)
SELECT x.eventdate, x.eventtype, y.eventdate AS eventdate_next, y.eventtype AS eventtype_next
FROM x
LEFT JOIN (SELECT DISTINCT eventdate, eventtype, rnk FROM x) y ON y.rnk = (x.rnk + 1)
ORDER BY x.eventdate
) starts
WHERE
eventtype = 'START'
GROUP BY eventtype
আমার প্রথম প্রয়াস স্ট্যাকওভারফ্লো পোস্টগ্রেস 9.1 - পরবর্তী মান পাওয়া থেকে দুর্দান্ত উদাহরণের উপর ভিত্তি করে
বিঃদ্রঃ; আপনি গ্রুপ এবং এসইএম-এর মাধ্যমে মন্তব্য করতে পারেন এবং শুরুতে আন-মন্তব্য করতে পারেন *