6

これはやりたいことですが、行き詰まっています。

このように簡略化できるデータがいくつかあります。

id    user    unixtime
-----------------------
1     dave    1335312057
2     dave    1335312058
3     steve   1335312128

これまでのところ、私は日ごとに集計する必要があるだけなので、次のものを使用しています。

SELECT
 UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(unixtime))) AS time,
 count(c.user) AS count
FROM core c
GROUP BY DATE(FROM_UNIXTIME(unixtime))

CONCATをDATEとHOURで使用してみましたが、期待どおりに機能させることができません。何かアイデアはありますか?

4

2 に答える 2

5
SELECT
 DATE(FROM_UNIXTIME(unixtime)) as date,
 HOUR(FROM_UNIXTIME(unixtime)) AS hour,
 count(c.user) AS count
FROM core c
GROUP BY 1,2 

時間をUNIXタイムスタンプとして使用する場合は、次のクエリをラップして取得します。

SELECT UNIX_TIMESTAMP(DATE_ADD(the_date, INTERVAL the_hour HOUR)), the_count
from (select
    DATE(FROM_UNIXTIME(unixtime)) as the_date,
    HOUR(FROM_UNIXTIME(unixtime)) as the_hour,
    count(c.user) AS the_count
    FROM core c
    GROUP BY 1,2 
) x

注:the_予約語の問題を回避するために、列名にプレフィックスを使用しました

于 2012-10-27T19:33:25.380 に答える
1

使ってみてください

SELECT
     UNIX_TIMESTAMP(DATE_ADD(DATE(FROM_UNIXTIME(unixtime)), INTERVAL HOUR(FROM_UNIXTIME(unixtime)) HOUR)) AS TIME,
     COUNT(c.user) AS COUNT
    FROM core c
    GROUP BY DATE(FROM_UNIXTIME(unixtime)), HOUR(FROM_UNIXTIME(unixtime));

お役に立てれば...

于 2012-10-27T19:43:36.043 に答える