MySQL : DateTime 필드에서 "가장 바쁜"또는 "가장 인기있는"시간을 얻습니까?

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

문제

필드 -ID (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

나는 Simon과 Peter의 답변을 모두 좋아하지만 받아 들여진대로 둘 다 선택할 수는 없습니다. 나는 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;

30 분 또는 1/4 시간까지 좀 더 유연한 것을 원한다면 다음을 수행 할 수 있습니다.

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

가장 인기있는 2 시간 간격을 원한다면 7200을 사용하십시오. 가장 인기있는 15 분 간격, 900을 사용하십시오. 1 시간에 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