0

日ごとにグループ化されたすべての行の出現をカウントし、それらを次の形式のデータセットに合計する必要があるデータセットがあります。

|     date     |  count  |
|  2001-01-01  |    11   |
|  2001-01-02  |    0    |
|  2001-01-03  |    4    |

問題は、特定の期間の一部のデータが欠落しているため、カウントがゼロになるように新しい日付を作成する必要があることです。この同じ問題を考慮してさまざまなトピックを検索しましたが、それらから、一時的なカレンダー テーブルを作成してすべての日付を保持し、結果データセットを日付テーブルに結合することで解決できることがわかりました。

ただし、使用しているデータベースへの読み取りアクセス権しかないため、別のカレンダー テーブルを作成することはできません。では、これを単一のクエリだけで解決できるでしょうか? そうでない場合は、いつでも PHP でこれを行うことができますが、より簡単な方法でこれを行うことをお勧めします。

編集:コメントで尋ねられた質問に基づいて明確にするために:欠落している日付は、ユーザーが指定した特定の時間枠に必要です。たとえば、クエリは次のようになります。

SELECT date(timestamp), count(distinct(id)) 
FROM 'table' 
WHERE date(timestamp) BETWEEN date("2001-01-01") AND date("2001-12-31")
GROUP BY date(timestamp)
4

2 に答える 2

0

これを試して...

SELECT Date, COUNT(*) Count
FROM yourtable
GROUP BY Date

これは確かに機能します!!!

それが助けになったら、私に知らせてください!

于 2012-06-18T08:10:07.230 に答える
0

SQL は、この種の仕事のために作られているわけではありません:/

それは可能ですが、本当に面倒ですので、そうしないことを強くお勧めします。

最も簡単な方法は、別のカレンダー テーブルを用意することでしたが、あなたが言ったように、データベースへの読み取りアクセス権しかありません。

もう 1 つは、この種のトリックを使用してシーケンスを生成することです。

SELECT @rownum:=@rownum+1 rownum, t.*FROM (SELECT @rownum:=0) r, ("yourquery") t;

私はすでにあなたに言ったように、それは本当に醜いです:(

于 2012-06-18T09:52:35.930 に答える