1

MySQL に、すべてのユーザーの最終ログイン時間を格納するテーブルがあります。特定の月に毎日ログインしているユーザーを照会する方法はありますか? 例えば。1月に毎日ログインするユーザーのリスト

更新:テーブルは非常に単純で、2つのフィールドのみです:

  structure 
  -----------------------
  userid   last_login_time
4

3 に答える 3

0

MySQL MONTH句を使用します。

SELECT * FROM user_logins ORDER BY MONTH(last_login_time) DESC LIMIT 1;

上記のクエリは最新のレコードを返します。

現在、最新のレコードが現在ログインしている日付の場合は、で使用できLIMIT 1,1ますLIMIT

于 2013-02-26T10:36:23.867 に答える
0

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)
于 2013-02-26T10:25:45.840 に答える
0

次のクエリを使用して、必要な結果を取得します

  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をご希望の方は……

于 2013-02-26T10:50:20.420 に答える