शीर्षक वास्तव में समस्या का पूरी तरह से वर्णन नहीं करता है, अर्थात: मेरे पास तिथियों वाली एक तालिका है -
1. 2011-07-01 13:01:48
2. 2011-07-01 13:09:36
3. 2011-07-01 13:21:24
4. 2011-07-01 13:35:12
5. 2011-07-01 13:49:23
6. 2011-07-01 13:57:47
7. 2011-07-01 14:05:12
8. 2011-07-01 14:12:45
9. 2011-07-01 14:31:48
10. 2011-07-01 14:47:31
और इसी तरह। मुझे प्रत्येक घंटे की तीन यादृच्छिक तिथियां प्राप्त करने की आवश्यकता है, उदाहरण के लिए:
1. 2011-07-01 13:01:48
2. 2011-07-01 13:21:24
3. 2011-07-01 13:49:23
4. 2011-07-01 14:05:12
5. 2011-07-01 14:12:45
6. 2011-07-01 14:47:31
मैं इसे MySQL में कैसे कर सकता हूं?
4 जवाब
यदि आपके पास प्रति घंटे सांख्यिकीय रूप से पर्याप्त पंक्तियाँ हैं तो यह बहुत अच्छी तरह से काम करना चाहिए:
select *
from (
select *
from yourtable
order by rand()
)
group by date(yourdate), hour(yourdate), floor(rand()*3)
create table dates (`date` datetime);
insert into dates (`date`) values
('2011-07-11 06:05:02'),
('2011-07-11 06:15:02'),
('2011-07-11 06:45:02'),
('2011-07-11 06:55:02'),
('2011-07-11 06:56:02'),
('2011-07-11 08:05:02'),
('2011-07-11 08:07:02'),
('2011-07-11 08:09:02'),
('2011-07-11 08:11:02'),
('2011-07-11 08:40:02'),
('2011-07-11 09:05:02'),
('2011-07-11 11:10:02'),
('2011-07-11 11:11:02'),
('2011-07-11 11:55:02')
;
set @i := 0;
set @d := '';
select `date`
from (
select
case
when @d != date_format(`date`, '%Y-%m-%d %H')
then @i := 0
else @i := @i + 1
end as i,
case
when @d != date_format(`date`, '%Y-%m-%d %H')
then @d := date_format(`date`, '%Y-%m-%d %H')
end as d,
case when @i < 3 then `date` else null end as `date`
from (
select `date`
from dates
order by date_format(`date`, '%Y-%m-%d %H'), rand()
) ss
) sw
where `date` is not null
order by `date`
;
यदि डेटा सेट बड़ा नहीं है - यदि आपका डेटा सेट बड़ा है तो आपको डेटा सेट पर कुछ यादृच्छिक एल्गोरिदम का उपयोग नहीं करना चाहिए, फिर आप निम्न सरल क्वेरी का उपयोग कर सकते हैं:
select * from t order by rand() limit 6;
एक चीज जो आप कर सकते हैं वह है कि आपको जो कुछ भी चाहिए उसे चुनने के लिए क्वेरी लिखें, फिर परिणामों को किसी सरणी या अस्थायी तालिका में संग्रहीत करें। यदि आप एक अस्थायी तालिका का उपयोग करते हैं, तो अनुक्रमणिका के लिए एक स्तंभ जोड़ें, और जब आप अपना डेटा अस्थायी तालिका में सम्मिलित करते हैं, तो मान को अनुक्रमणिका स्तंभ में भी लिखें। फिर उस सरणी या अस्थायी तालिका से, यादृच्छिक संख्या जनरेटर द्वारा कभी भी इंडेक्स उत्पन्न होने वाले रिकॉर्ड के लिए क्वेरी करें।
संबंधित सवाल
नए सवाल
mysql
MySQL एक फ्री, ओपन सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है जो स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) का उपयोग करता है। इस टैग को अन्य DBs जैसे SQL Server, SQLite आदि के लिए उपयोग न करें। वे विभिन्न DB हैं जो सभी डेटा का प्रबंधन करने के लिए SQL की अपनी बोलियों का उपयोग करते हैं।