0

次のようなテーブル構造とサンプルデータがあります。

+----+-----------+------+-------+---------+
| id | item_code | year | month | sales   |
+----+-----------+------+-------+---------+
| 1  |   12341   | 2011 |   10  | 1000000 |
+----+-----------+------+-------+---------+
| 2  |   12342   | 2011 |   11  | 2000000 |
+----+-----------+------+-------+---------+
| 3  |   12343   | 2011 |   12  | 3000000 |
+----+-----------+------+-------+---------+
| 4  |   12344   | 2012 |   01  | 4000000 |
+----+-----------+------+-------+---------+
| 5  |   12345   | 2012 |   02  | 5000000 |
+----+-----------+------+-------+---------+
| 6  |   12346   | 2012 |   03  | 6000000 |
+----+-----------+------+-------+---------+
| 7  |   12347   | 2012 |   04  | 6000000 |
+----+-----------+------+-------+---------+

ここで私の質問は、たとえば、現在の月が 2012 年 8 月 (04 - 2012) である場合、次の過去 6 か月のデータをどのように選択するかです。

+----+-----------+------+-------+---------+
| id | item_code | year | month | sales   |
+----+-----------+------+-------+---------+
| 1  |   12341   | 2011 |   10  | 1000000 |
+----+-----------+------+-------+---------+
| 2  |   12342   | 2011 |   11  | 2000000 |
+----+-----------+------+-------+---------+
| 3  |   12343   | 2011 |   12  | 3000000 |
+----+-----------+------+-------+---------+
| 4  |   12344   | 2012 |   01  | 4000000 |
+----+-----------+------+-------+---------+
| 5  |   12345   | 2012 |   02  | 5000000 |
+----+-----------+------+-------+---------+
| 6  |   12346   | 2012 |   03  | 6000000 |
+----+-----------+------+-------+---------+

...そして、平均販売額を取得しますか? 何か案は?ティア!!!

4

1 に答える 1

3

最善の方法は、適切な日付が含まれるようにテーブルを再編成することです。必要に応じて、特定の目的のためにこれらの列をそこに保持できますが、適切な日付を設定すると、まさに今行う必要があることに基づいて強力な SQL 関数を使用できます。

たとえば、次のようなことができます。

select someData from yourTable where columnDate>=date_sub(now(), interval 6 month);

egyal が正しく言及しているように、次のような多くの集計関数を簡単に取得できます。

select avg(sales) from ...

これにより、where 句に入力した条件 (過去 6 か月など) の平均売上が返されます。

現在の年/月の列を保持していない場合でも、次のような日付列からその情報を取得できます。

select date_format(columnDate, '%Y') from .... // output: 2012

あれは何でしょう?あなたは今月が欲しいですか?

select date_format(columnDate, '%m') from .... // output: 08

あれは何でしょう?月の完全な名前が必要ですか?バム!

select date_format(columnDate, '%M') from .... // output: August
于 2012-08-13T08:26:58.803 に答える