5

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

このデータ セットの 1 日の中で最も忙しい/最も人気のある時間を知りたいです。この例では、探している結果は 12 になります。

アイデア?

4

5 に答える 5

7

最も人気のある時間だけを取得するには、次のクエリを使用します

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;
于 2010-03-18T16:39:54.010 に答える
4

もう少し柔軟に、たとえば 30 分または 15 分に変更したい場合は、次のようにします。

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 秒) を扱っていることを覚えておく必要があります。

于 2010-03-18T16:54:40.800 に答える
3

Simon と Peter の両方の回答が気に入っていますが、両方を承認済みとして選択することはできません。2 つを組み合わせて、人気のある時間のみを返すよりクリーンなクエリを作成しました (カウントは必要ありません)。

SELECT hour(date_created) AS h 
FROM my_table 
GROUP BY h 
ORDER BY count(*) DESC 
LIMIT 1
于 2010-03-18T17:28:37.080 に答える
3

関数を使用しhour()て時間を抽出し、通常の集計を行います。

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

于 2010-03-18T16:36:45.573 に答える
0

これを試すことができます:

SELECT 
  DATE_FORMAT(date,'%H') as hours, 
  count(*) as count 
FROM 
  myTable 
GROUP BY 
  hours 
ORDER BY 
  count DESC
于 2010-03-18T16:39:04.277 に答える