0

3日間(連続)のSQLを使用して統計をクエリしたいと思います。表示は次のようになります。

今日作成された15人のユーザー、昨日10人、2日前に12人

SQLは次のようになります(今日の場合):

SELECT Count(*) FROM Users WHERE created_date >= '2012-05-11'

そして、昨日と前日にさらに2つのクエリを実行します。

したがって、データベース全体に対して合計3つのクエリを実行しています。created_dateの形式は2012-05-11 05:24:11(date&time)です。

たとえば、1つのクエリでこれを行うためのより効率的なSQLの方法はありますか?

具体的には、PHPとSQLite(つまりPDO拡張機能)を使用しています。

結果は3つの異なる数値になります(毎日1つ)。

誰かが比較していくつかのパフォーマンス数値を示す可能性はありますか?

4

4 に答える 4

1

最善の解決策は、 を使用することGROUP BY DAY(created_date)です。クエリは次のとおりです。

SELECT DATE(created_date), count(*) 
FROM users
WHERE created_date > CURRENT_DATE - INTERVAL 3 DAY
GROUP BY DAY(created_date)
于 2012-05-11T17:11:32.650 に答える
0

jeroenが提案したように使用GROUP BYしますが、他の期間を計画している場合は、次のように範囲を設定することもできます。

SELECT SUM(IF(created_date BETWEEN '2012-05-01' AND NOW(), 1, 0)) AS `this_month`,
       SUM(IF(created_date = '2012-05-09', 1, 0)) AS `2_days_ago`
FROM ...

以下に示すように、SQLiteには機能がありませんが、代わりにIF機能がありCASEます。したがって、このように機能するはずです。

SELECT SUM(CASE WHEN created_date BETWEEN '2012-05-01' AND NOW() THEN 1 ELSE 0 END) AS `this_month`,
       SUM(CASE created_date WHEN '2012-05-09' THEN 1 ELSE 0 END) AS `2_days_ago`
FROM ...
于 2012-05-11T17:08:52.923 に答える