質問

私は次のようなデータを持つテーブルを持っています:

UserName | LastLogin 
-------------------------------
User1    | 2010-10-25 10:05:47
User2    | 2010-10-23 11:10:27
User3    | 2010-10-12 05:39:34
User4    | 2010-10-20 12:22:11
User5    | 2010-09-17 08:41:05

私は最後の3日間でログインしている人の数、最後の7日間、そして最後の21日間(私はこれらの数字が重なることを知っている)を取得するためにクエリを実行できるようにしたいです。私は(構文が100%正確でない場合があります)のようなクエリを実行して、各特定の値を取得することができます知っています:

SELECT COUNT(*) 
  FROM login 
 WHERE LastLogin >= DATEDIFF(NOW(), LastLogin, INTERVAL 3 DAY);

缶私は1つのクエリですべての3つの値を返すようにクエリを実行しますか?仕事BY GROUPウィル、または私は、ネストされたクエリを使用することができますか?指定されたそれは異なる間隔でクエリを3回実行するだけで効率的ようですか?

役に立ちましたか?

解決

使用します。

SELECT SUM(CASE WHEN l.lastlogin >= DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY) THEN 1 ELSE 0 END) AS within_3,
       SUM(CASE WHEN l.lastlogin >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS within_7,
       SUM(CASE WHEN l.lastlogin >= DATE_SUB(CURRENT_DATE, INTERVAL 21 DAY) THEN 1 ELSE 0 END) AS within_21
  FROM LOGIN l
NOW()は、時間部分を含むためます。

私はCURRENT_DATEを使用するよりもむしろNOW()

他のヒント

SELECT *
FROM   (SELECT COUNT(*) AS Last3Days FROM login WHERE LastLogin >= DATEDIFF(CURRENT_DATE, LastLogin, INTERVAL 3 DAY) a,
       (SELECT COUNT(*) AS Last7Days FROM login WHERE LastLogin >= DATEDIFF(CURRENT_DATE, LastLogin, INTERVAL 7 DAY) b,
       (SELECT COUNT(*) AS Last21Days FROM login WHERE LastLogin >= DATEDIFF(CURRENT_DATE, LastLogin, INTERVAL 21 DAY) c
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top