2017-11-03 22 views
0

私はGoogleのグラフのデータを取得しようとしています。毎日の1時間ごとに一意の値を合計したいと思っています。しかしDISTINCTGROUP BYで動作しません。MySQL DISTINCTはGROUP BYタイムスタンプでは機能しません

SELECT DATE_FORMAT(created_at, "%Y-%m-%d %H:00:00") as date, 
COUNT(DISTINCT visitor_id) as visitors FROM `visitors` 
WHERE web='example.com' AND created_at BETWEEN '2017-11-02 00:00:00' AND '2017-11-02 23:59:59' 

GROUP BYの結果は表示されません。

date     visitors 
---------------------|----------| 
2017-11-02 14:00:00 | 2168 | 

GROUP BY dateとの結果は、私は2番目の結果に到達したいが、一意の値

の右合計で2つ目の質問は、私は確認することができる方法である

date     visitors 
---------------------|----------| 
2017-11-02 00:00:00 | 19 | 
2017-11-02 01:00:00 | 16 | 
2017-11-02 02:00:00 | 18 | 
...      ... 
total will be 2749 

されることを、いくつかの後私の一意の価値は他の日付に割り当てられないでしょうか?

+0

あなただけの各訪問者のための最初の訪問を取得しようとしていますか? – Zamfi

+0

私は正しいタイムスタンプチャートを作成するために最初の別個の値だけを得なければならないと思います。しかし、私はまず値がユニークであることを確かめたい。さて、彼らはそうではありません – qqmydarling

+0

私たちはどのように正しい額が何であるか知っていますか?参照:[私は非常に単純なSQLクエリと思われるものに対してMCVEを提供するのはなぜですか?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve- for-what-like-to-my-to-be-a-very-simple-sql-query) – Strawberry

答えて

2

あなたはこれで右の合計をカウントすることができるはずです。

SELECT DATE_FORMAT(created_at, "%Y-%m-%d %H:00:00") as date, 
COUNT(visitor_id) as visitors 

FROM (
    SELECT MIN(created_at) AS created_at, visitor_id 
    FROM `visitors` 

    WHERE web='example.com' 
    AND created_at BETWEEN '2017-11-02 00:00:00' AND '2017-11-02 23:59:59' 

    GROUP BY visitor_id 
) all_visits 

GROUP BY DATE_FORMAT(created_at, "%Y-%m-%d %H:00:00") 
+1

あなたは正しいです。ありがとう – qqmydarling

関連する問題