MySQL に、すべてのユーザーの最終ログイン時間を格納するテーブルがあります。特定の月に毎日ログインしているユーザーを照会する方法はありますか? 例えば。1月に毎日ログインするユーザーのリスト
更新:テーブルは非常に単純で、2つのフィールドのみです:
structure
-----------------------
userid last_login_time
MySQL に、すべてのユーザーの最終ログイン時間を格納するテーブルがあります。特定の月に毎日ログインしているユーザーを照会する方法はありますか? 例えば。1月に毎日ログインするユーザーのリスト
更新:テーブルは非常に単純で、2つのフィールドのみです:
structure
-----------------------
userid last_login_time
MySQL MONTH
句を使用します。
SELECT * FROM user_logins ORDER BY MONTH(last_login_time) DESC LIMIT 1;
上記のクエリは最新のレコードを返します。
現在、最新のレコードが現在ログインしている日付の場合は、で使用できLIMIT 1,1
ますLIMIT
。
last_login_time
実際に最後のログイン時間だけでなく、すべてのログイン時間である場合:
SELECT userID
FROM table
WHERE MONTH(last_login_time) = 2 AND YEAR(last_login_time) = 2013
GROUP BY userID
HAVING COUNT(DISTINCT DAY(last_login_time)) = DAY(LAST_DAY(MAX(last_login_time)))
以下はインデックスを使用できると思うので、より効率的かもしれません:(インデックスが付けられている場合)
SELECT userID
FROM table
WHERE last_login_time LIKE '2013-02%'
GROUP BY userID
HAVING COUNT(DISTINCT DAY(last_login_time)) = DAY(LAST_DAY(MAX(last_login_time)))
last_login_time
が最後のログイン時間である場合:
今月ログインした日数を示すカウンターとなる別の列をテーブルに追加し、ユーザーが新しい日にログインするたびに更新します。新しい月が始まるときにこのカウンターをリセットします。
ユーザーを獲得するには:
SELECT userID
FROM table
WHERE last_login_time LIKE '2013-02%'
AND counter = DAY(last_login_time)
次のクエリを使用して、必要な結果を取得します
select * from logindetails lg
group by userid having month(lg.` last_login_time`)=2 and year(lg.` last_login_time`)=2013 and
(count(distinct(day(lg.` last_login_time`)))) =day(last_day(lg.` last_login_time`))
上記のクエリで、2 は 2 月を表します。3月利用3、4月利用4をご希望の方は……