MySQL: الحصول على ساعة "ازدحام" أو "الأكثر شعبية" من حقل DateTime؟

StackOverflow https://stackoverflow.com/questions/2471546

سؤال

النظر في الجدول التالي الذي يحتوي على الحقول - معرف (int) و date_created (DateTime):

id       date_created

 1       2010-02-25 12:25:32
 2       2010-02-26 13:40:37
 3       2010-03-01 12:02:22
 4       2010-03-01 12:10:23
 5       2010-03-02 10:10:09
 6       2010-03-03 12:45:03

أريد أن أعرف أكثر ساعات اليوم ازدحامًا/شعبية في هذه المجموعة من البيانات. في هذا المثال ، ستكون النتيجة التي أبحث عنها 12.

أفكار؟

هل كانت مفيدة؟

المحلول 4

أحب كل من إجابات سيمون وبيتر ، لكن لا يمكنني تحديد كلاهما كما هو مقبول. قمت بدمج 2 لإجراء استعلام أنظف لم يعيد سوى الساعة الشائعة (لا أحتاج إلى التهم).

SELECT hour(date_created) AS h 
FROM my_table 
GROUP BY h 
ORDER BY count(*) DESC 
LIMIT 1

نصائح أخرى

للحصول على ساعة أكثر شعبية ، استخدم هذا الاستعلام

select date_format( date_created, '%H' ) as `hour`
  from [Table]
 group by date_format( date_created, '%H' )
 order by count(*) desc
 limit 1;

إذا كنت ترغب في إلقاء نظرة على جميع البيانات ، فانتقل إلى هذه البيانات

select count(*) as num_records
     , date_created
     , date_format( date_created, '%H' ) as `hour`
  from [Table]
 group by `hour`
 order by num_records desc;

إذا كنت تريد شيئًا أكثر مرونة قليلاً ، ربما إلى نصف ساعة أو ربع ساعة ، يمكنك القيام بما يلي:

SELECT floor(time_to_sec(date_created)/3600),count(*) AS period 
FROM table GROUP BY period ORDER BY c DESC

إذا كنت تريد الفاصل الزمني الأكثر شعبية لمدة ساعتين ، فاستخدم 7200. الفاصل الزمني الأكثر شعبية لمدة 15 دقيقة ، استخدم 900. تحتاج فقط إلى تذكر أنك تتعامل مع ثواني (3600 ثانية في ساعة واحدة).

استخدم ال hour() وظيفة لاستخراج الساعة ، ثم قم بالتجميع المعتاد:

SELECT count(hour(date_created)) AS c, hour(date_created) AS h FROM table GROUP BY h ORDER BY c DESC;

يمكنك تجربة هذا:

SELECT 
  DATE_FORMAT(date,'%H') as hours, 
  count(*) as count 
FROM 
  myTable 
GROUP BY 
  hours 
ORDER BY 
  count DESC
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top