MySQLの:日時フィールドから「忙しい」または「最も人気のある」時間を取得しますか?

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

質問

:ID(INT)とDATE_CREATED(日時) -

のフィールドを有し、次の表を検討

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;

あなたがもう少し柔軟な何かをしたい場合は、おそらく半分の時間、または、15分には、次の操作を行うことができます:

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

あなたは最も人気のある2時間の間隔をしたい場合は、最も人気のある15分間隔7200を使用して、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