সময় টেবিলের বিতরণ

আমি একটি মাইএসকিউএল টেবিল আছে প্রতি ব্যবহারকারী প্রায় 3000 সারি। কলামগুলির মধ্যে একটি ডেটটাইম ক্ষেত্র, যা পরিবর্তনযোগ্য, তাই সারি ক্রমবর্ধমান ক্রমে নেই।

আমি একটি চার্ট সময় বন্টন কল্পনা করতে চাই, তাই আমি বিভিন্ন ড্যাটাপয়েন্টের সংখ্যা প্রয়োজন। ২0 টি ডেটাপয়েন্ট যথেষ্ট হবে।

আমি এটা করতে পারে:

select timefield from entries where uid = ? order by timefield;

এবং প্রতি 150 তম সারিতে তাকান

অথবা আমি 20 আলাদা ক্যোয়ারী করতে পারি এবং সীমা 1 এবং অফসেট ব্যবহার করতে পারি।

কিন্তু একটি আরো কার্যকর সমাধান অবশ্যই আছে ...

0
ro fr hi
আপনি কি একটু প্রশ্ন জিজ্ঞাসা করতে পারেন? আপনি খুঁজছেন আউটপুট কি? আপনি একটি ফ্রিকোয়েন্সি চার্ট দেখতে চান (উদাহরণস্বরূপ: Jan = 132, ফেব্রুয়ারি = 112, মার্চ = 173, ইত্যাদি এন্ট্রির সংখ্যা), অথবা আপনি কি প্রথম ভুক্তির স্বতন্ত্র মানগুলি চান, 150 তমতমতম এন্ট্রি, 300 তম, ইত্যাদি?
যোগ লেখক nickf, উৎস

7 উত্তর

আমার রেফারেন্সের জন্য - এবং পোস্টগার্স ব্যবহার করে যারা - Postgres 9.4 সেট সমষ্টি যে এই সমস্যা সমাধান করা উচিত আদেশ আছে:

SELECT percentile_disc(0.95) 
WITHIN GROUP (ORDER BY response_time) 
FROM pageviews;

Source: http://www.craigkerstiens.com/2014/02/02/Examining-PostgreSQL-9.4/

0
যোগ

@ মাইকেল

যে কোন কারণে, আপনার উদাহরণ শুধুমাত্র যখন যেখানে @recnum অপারেটারের চেয়ে কম ব্যবহার করে তখনই কাজ করে। আমি মনে করি যখন যেখানে একটি সারি ফিল্টার আউট, rownum বৃদ্ধি না, এবং এটি অন্য কিছু মেলে না।

মূল টেবিলের একটি স্বয়ংক্রিয় বৃদ্ধি আইডি কলাম আছে, এবং সারি ক্রমবর্ধমান ক্রমে ঢোকানো হয়েছিল, তাহলে এটি কাজ করা উচিত:

select timefield from entries
where uid = ? and id % 150 = 0 order by timefield;

অবশ্যই আইডি এবং টাইমফিল্ডের মধ্যে কোন পার্থক্য নেই যদি না কাজ না করে, যদি না আপনি প্রকৃতপক্ষে সমানভাবে অবস্থানকালের সময়সীমার জন্য চিন্তা করেন না, শুধু 20 র্যান্ডম ক্রম

0
যোগ

এই মত কিছু আমার মন এসেছিল

select @rownum:[email protected]+1 rownum, entries.* 
from (select @rownum:=0) r, entries 
where uid = ? and rownum % 150 = 0

আমার হাতে আমার মাইএসকিউএল নেই কিন্তু সম্ভবত এটি সাহায্য করবে ...

0
যোগ

যতদূর দৃশ্যমান হয়, আমি জানি এটি এমন সময়সাপেক্ষ নমুনা যা আপনি কথা বলছেন না, তবে আমি একজন ব্যবহারকারীর জন্য সব সারিগুলি দেখব এবং ব্যাল্টের মধ্যে একটি অন্তর্বর্তী বালতি, SUM নির্বাচন করব এবং একটি বার গ্রাফ বা অনুরূপ দেখবো। এটি একটি বাস্তব "বন্টন" দেখাবে, যেহেতু একটি সময় ফ্রেমের মধ্যে অনেকগুলি ঘটনা উল্লেখযোগ্য হতে পারে।

SELECT DATEADD(day, DATEDIFF(day, 0, timefield), 0) AS bucket -- choose an appropriate granularity (days used here)
     ,COUNT(*)
FROM entries
WHERE uid = ?
GROUP BY DATEADD(day, DATEDIFF(day, 0, timefield), 0)
ORDER BY DATEADD(day, DATEDIFF(day, 0, timefield), 0)

অথবা যদি আপনি আপনার পুনরাবৃত্তি করতে চান তা পছন্দ করেন না - অথবা যদি আপনি বিভিন্ন বালতি দিয়ে খেলেন এবং 3-ডি (x, y uid, bucket এর সাথে Z তে পরিমাপ) এ অনেক ব্যবহারকারীর বিশ্লেষণ করতে চান:

SELECT uid
    ,bucket
    ,COUNT(*) AS measure
FROM (
    SELECT uid
        ,DATEADD(day, DATEDIFF(day, 0, timefield), 0) AS bucket
    FROM entries
) AS buckets
GROUP BY uid
    ,bucket
ORDER BY uid
    ,bucket

যদি আমি 3-ডি-তে চক্রান্ত করতে চাই, তবে সম্ভবত ব্যবহারকারীদের জন্য কিছু অর্থপূর্ণ সামগ্রিক মেট্রিক অনুযায়ী ব্যবহারকারীদের অর্ডার করার উপায়টি নির্ধারণ করব।

0
যোগ
না, আপনি, তবে, অপ্টিমাইজার আসলে সেই এক্সপ্রেশন গণনা করতে পারেন না, কারণ এটি জানে যে ফাংশনটি নির্ণায়ক ভিত্তিক।
যোগ লেখক Cade Roux, উৎস
আপনি কি "বালতি আদেশ বার বেল্ট দ্বারা" করতে পারেন? যে মনে হয় এটি আরো অনেক দক্ষ হবে (যে কলাম প্রতিটি সময় পুনর্মূল্যায়ন না থাকার)
যোগ লেখক nickf, উৎস

মীখল সজান্দার প্রায় এটি ছিল, কিন্তু আপনি এসকিউএলের WHERE ক্লাবে কলাম উপনাম ব্যবহার করতে পারবেন না। তাই আপনি এটি একটি প্রাপ্ত টেবিল হিসাবে এটি মোড়ানো আছে। আমি এই চেষ্টা করেছি এবং এটি 20 সারি ফেরৎ:

SELECT * FROM (
    SELECT @rownum:[email protected]+1 AS rownum, e.*
    FROM (SELECT @rownum := 0) r, entries e) AS e2
WHERE uid = ? AND rownum % 150 = 0;
0
যোগ
select timefield
from entries
where rand() = .01 --will return 1% of rows adjust as needed.

কোনও মাইএসকিউএল বিশেষজ্ঞ নয় তাই আমি নিশ্চিত নই যে এই পরিবেশে র্যান্ড() কীভাবে কাজ করে।

0
যোগ
যে "র্যান্ড() <.01"
যোগ লেখক nickf, উৎস

আপনি কি প্রকৃত তথ্য পয়েন্ট সম্পর্কে সত্যিই যত্ন নেন? অথবা আপনি কি জানতে চান তা বলার অপেক্ষা রাখে না বরং সংখ্যা সংখ্যা পরিসংখ্যানগত সমষ্টিগত ফাংশন ব্যবহার করা হবে?

0
যোগ