2017-01-06 7 views
0

に異なる結果を返す私の次のSQLクエリです:MySQLはここmonthwise年のデータと全体の年のデータ

SELECT count(`pd`.`email`) 
FROM `social_user_login_details` AS `pd` 
WHERE (DATE(db_add_date) BETWEEN 'START-DATE' AND 'END-DATE') 
GROUP BY `email` 

私は開始日と年の各月の日付を終了し、その数と計算を取得置く場合それは6357です。しかし、開始日を1月1日、終了日を12月31日とすると、6325が表示されます。これは、異なる日付の結果が異なるのはなぜですか?

テーブルの構造:

id   bigint(20) 
uid   varchar(255) 
user_name varchar(150) 
password varchar(250) 
email  varchar(150) 
firstname varchar(150) 
lastname varchar(150) 
db_add_date date 
+0

問題を説明する最小のデータセットが見つかる場合は、それが役に立ちます。 –

+0

テーブルには、およそ100万のレコードがあります。 – Girish

+1

あなたが数えていることはGROUP BYにとってちょっと奇妙です。 – Strawberry

答えて

2

を試すことができるの間に開始日と終了日の年を置くべきだと思います@ストロベリーが頭上に釘を打ちました - あなたがメールでグループ化すると、一意の各メールは一度カウントされます。電子メールが複数の月に発生した場合、発生した日付範囲でカウントされます。年を全体としてカウントすると、グループ化された電子メールは1回だけカウントされます。

あなたは同時にヶ月間の合計と合計が表示されますされ、次のことを試すことができます。

SELECT count(*), month(db_add_date) 
FROM `social_user_login_details` AS `pd` 
WHERE (DATE(db_add_date) BETWEEN 'START-DATE' AND 'END-DATE') 
GROUP BY `email`, month(db_add_date) WITH ROLLUP 

私はこの数ヶ月のすべての合計を表示しますと思いが、私は避難所」それを試してみる機会がありました。

私は数ヶ月間でデ - 複製の方法を考えることはできません - ヶ月の間で電子メールアドレスの最初の出現を示した...ただある程度毛深いサウンド、...、間違っている - このヤードスティックとイングランドの海岸線を測定する場合と12インチの定規を測定する場合のように、あなたが測定しているユニットに応じて異なる結果を得るような場合の1つです。

+0

これは答えです。特定の期間に使用された一意の電子メールアドレスの数をクエリでカウントします。月の合計を比較すると、ユーザーが別の月にログインしている可能性があるため、このクエリの年の結果は決して与えられません。 –

+0

ありがとうございます。私はそれをチェックした。私のdbテーブルでも同じことが起こります。もう一度ありがとう。可能であれば、この問題を解決するための解決策を教えてください。 – Girish

0

私は、私が思う、クエリ

WHERE pd.db_add_date BETWEEN #01/01/2016# AND #31/12/2016#; 

か、この

WHERE month(pd.db_add_date) between '01' and '12' 
+0

サンプル日付が使用されます。 毎月の計算のために: から:2016年1月1日に:2016年1月31日 から:2016年2月1日まで:2016年2月29日 から:2016から03を-01〜:2016-03-31 。 。 from:2016-12-01 to:2016-12-31 年次データ: from:2016-01-01 to:2016-12-31 – Girish

関連する問題