MySQL: الحصول على ساعة "ازدحام" أو "الأكثر شعبية" من حقل DateTime؟
-
20-09-2019 - |
سؤال
النظر في الجدول التالي الذي يحتوي على الحقول - معرف (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