2017-12-11 11 views
-3

日付と名前がグループ化されているMYSQLクエリが必要です。MySQLのグループ名と曜日

私は、次のクエリを使用しますが、それは効果的ではない:

SELECT * FROM (
SELECT NAME , COUNT(*) AS COUNT FROM TABLE WHERE DATE between '2017-02-01 00:00:00' AND '2017-02-28 23:59:59' 
GROUP BY DAY(DATE), NAME 
) AS T 
GROUP BY T.NAME; 

私はあなたが私を助けることができると思います。 ありがとうございます。

ここで私はそれがどのように見えるべきかの例があります:count(distinct ...)は、例えばここに働くだろうよう

original table   
+--------+------------+ 
| Name | Date  | 
+--------+------------+ 
| NAME_1 | 2017-02-01 | 
| NAME_1 | 2017-02-02 | 
| NAME_1 | 2017-02-01 | 
| NAME_1 | 2017-02-03 | 
| NAME_3 | 2017-02-04 | 
| NAME_3 | 2017-02-04 | 
| NAME_3 | 2017-02-04 | 
| NAME_2 | 2017-02-02 | 
| NAME_2 | 2017-02-03 |    
| NAME_2 | 2017-02-04 |    
+--------+------------+ 

first Group by DAY(DATE)   
+--------+------------+--------+ 
| Name | Date  | Count | 
+--------+------------+--------+ 
| NAME_1 | 2017-02-01 | 1  | 
| NAME_1 | 2017-02-02 | 1  | 
| NAME_1 | 2017-02-03 | 1  | 
| NAME_3 | 2017-02-04 | 3  | 
| NAME_2 | 2017-02-02 | 1  |   
| NAME_2 | 2017-02-03 | 1  |   
| NAME_2 | 2017-02-04 | 1  |   
+--------+------------+--------+ 

second: group by NAME and this is a final output   
+--------+------------+--------+ 
| Name | Date  | Count | 
+--------+------------+--------+ 
| NAME_1 | 2017-02-01 | 3  | 
| NAME_3 | 2017-02-04 | 3  | 
| NAME_2 | 2017-02-02 | 3  | 
+--------+------------+--------+ 
+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-シンプルSQLクエリー – Strawberry

+0

3のカウントを持つname_3について不明 –

答えて

0

が見えます

SELECT 
     NAME 
     , COUNT(distinct DAY(DATE)) AS count 
    FROM TABLE1 
    WHERE DATE >= '2017-02-01' AND DATE < '2017-03-01' 
    GROUP BY 
     NAME 

これを実行しないでください。

WHERE DATE between '2017-02-01 00:00:00' AND '2017-02-28 23:59:59' 

はそれがはるかに容易代わりにこれを使用する:

WHERE DATE >= '2017-02-01' AND DATE < '2017-03-01' 
  • は、あなたが「最後の日を計算する必要はありません常に月の最初の日(常に1つです:)を使用してください。
  • >=および<を使用すると、正確に保存されているすべてのタイプの日付/時刻データに対して正確です。
関連する問題