2017-08-25 22 views
0

私はタイムスタンプでいっぱいの列を持っていますSQLでグループの曜日と時間をグループ

   col1 
2017-01-01 10:30:00 
2017-01-02 08:10:00 
... 

私は曜日別にグループ化し、時間別にグループ化したいと考えています。

出力は次のようになり

day hour count 
    1  1  5 
     2  12 
    2  1  10 
     5  3 
    ... 

がどのようにSQLでこれを実装するのでしょうか? 私はMySQLを使用しています。

+0

1日目:MySQLで

ことで、グループ内の? – jarlh

+0

私はSQLがdayofweek()関数を使って日曜日に1を実装すると思いますか? – user7374610

+0

ANSI SQLにはそのような機能はありません。多分MySQLには? ISO 8601は、月曜日が1日であると言います。国によって方法が異なるため、必要なものを指定することをお勧めします。 – jarlh

答えて

3

派生テーブルで曜日と時間を抽出します。 GROUP BYその結果、のようなもの:

select d, h, count(*) 
from 
(
    select dayofweek(col1) d, hour(col1) h 
    from tablename 
) dt 
group by d, h 

注:私はMySQLを知らないので、あなたはDAYOFWEEKと時間の部分を調整する必要があるかもしれません...

0
select getdate() as Dates into #temp 

select datepart(DAY,dates), datepart(hour, dates), count(*) from #temp group by dates 

datepartの機能をどのように使っていますか?

0

あなたはMySQL関数のDAYOFWEEKと時間を使用することができます月曜日のための

CREATE TABLE IF NOT EXISTS test (
    col TIMESTAMP 
) ; 

INSERT INTO test (col) VALUES 
    (TIMESTAMPADD(HOUR, 7, TIMESTAMPADD(DAY, 1, CURDATE()))), 
    (TIMESTAMPADD(HOUR, 6, TIMESTAMPADD(DAY, 2, CURDATE()))), 
    (TIMESTAMPADD(HOUR, 7, TIMESTAMPADD(DAY, 3, CURDATE()))), 
    (TIMESTAMPADD(HOUR, 7, TIMESTAMPADD(DAY, 10, CURDATE()))), 
    (TIMESTAMPADD(HOUR, 7, TIMESTAMPADD(DAY, 1, CURDATE()))), 
    (TIMESTAMPADD(HOUR, 6, TIMESTAMPADD(DAY, 2, CURDATE()))) 
; 

SELECT dayofweek (col), hour(col), count(*) 
FROM test GROUP BY dayofweek(col), hour(col); 
+0

として日曜日1日目として、ここを見て:https://stackoverflow.com/questions/1202919/mysql-dayofweek-my-week-begins-with-monday – EMottet

関連する問題