2009-06-10 9 views
1

だから私がやっていることはちょっと難しいです。私は指定された時間枠のカウントを返すことができるSQLクエリを考え出すことを試みています。だから私はテーブル 'v'を持っています。ここでMySQL:特定の時間枠からのレコード数の取得

Table v 
_____________ 
id p_id created_at 
1  1  2009-06-09 18:54:17 
2  2  2009-06-09 21:51:24 
3  2  2009-06-10 18:53:51 
4  1  2009-06-10 01:20:36 
5  1  2009-06-10 11:20:36 

v表からいくつかの基本的なデータは基本的に、私は、指定された時間枠(時間、日、週、月、年)のために戻って結果を取得したいです。私はこれを幾日か作業していますが、カウントがゼロのタイムフレームの結果を返すことはできません。基本的には、タイムフレームとデリミタ(時、日など)を与え、その時間枠内でテーブルvから行数を取得できるようにしたいと思います。

これは、私は現在試みたものです:

select count(*) as count, date_format(created_at, "%m/%d/%y") as date from v where p_id = 56 group by date_format(created_at, "%m/%d/%y"); 

戻り

+-------+-------------------------------------+ 
| count | date_format(created_at, "%m/%d/%y") | 
+-------+-------------------------------------+ 
|  3 | 06/09/09       | 
+-------+-------------------------------------+ 

しかし、これを考慮に時間枠を取ることはありません。何か案は?

答えて

1

私が推薦いつもの事はそれが好きでやっている:

SELECT COUNT(*) AS `num` 
FROM `table` 
WHERE `created_at` >= '2009-09-06 00:00:00' 
AND `created_at` < '2009-09-07 00:00:00' 

ようにタイムスパンの異なるスケールの問題に対処し、あなたの日付/時間の範囲内、すなわちストレート問い合わせを。テーブルに十分なレコードがあれば、created_atのインデックスは役に立たなくなる可能性がありますが、それでもDATE_FORMATの結果と比較するよりもうまくいくはずです。クエリオプティマイザが賢明なものでなければ、インデックスを使用するのではなく、すべての行に対してDATE_FORMATを実行して結果を比較します。

あなたの状況について処理していないものがあると思われます。これはあなたのためにはうまくいかない、または既にそうしていると思われますが、私はフィードバックを待つ必要がありますそれらは。

0
SELECT 
    COUNT(*) AS cnt, 
    DATE_FORMAT(created_at, "%m/%d/%y") AS my_date 
FROM 
    v 
WHERE 
    p_id = 56 AND 
    created_at BETWEEN first_date AND second_date 
GROUP BY 
    DATE_FORMAT(created_at, "%m/%d/%y");
0
SELECT COUNT(*), created_at 
FROM v 
WHERE p_id = 56 
    and created_at >= sometime and created_at <= dateadd(hour,1,sometime) 

また、あなたが欠けている時間枠を取得する日、年などを追加することができます。

詳細については、このリンクを参照してください:タイムスタンプからhttp://msdn.microsoft.com/en-us/library/ms186819.aspx

0

、いない日付:

SELECT COUNT(*)、DATE_FORMAT(FROM_UNIXTIME(のcreated_at)、 "%mの%のY")mDate AS FROM v GROUP BY mDate

0

特定の期間のレコードがなくなると、その期間の合計をMySQLサーバーに送ることはできません。すべての提案されたソリューション(あなたを含む)は動作しますが、レコードのない期間の行は返されません。

アプリケーションでこのクエリを使用している場合は、グリッドに手動でゼロカウントの行を作成するか、結果を表示するために使用しているものを作成することをお勧めします。

関連する問題