レポートを保存するテーブルがあるデータベースがあります。各レポートには、レポートが作成されるたびに設定される日付(年月日)があります。"where"を使用してデータベースの "count"を取得する
多くのテストの後、私は何か作業をしましたが、うまく動作しません。
最初の日付(年 - 月 - 日)から最終日(年 - 月 - 日)までの毎月のレポートの量を取得したいと思います。しかし、私はどのようにそれを完了するためにはよく分かりません。
これは私が今使っているMySQLの文である:
SELECT meses.month id_mes, count(re_fecha) total
FROM
(
SELECT 1 AS MONTH
UNION SELECT 2 AS MONTH
UNION SELECT 3 AS MONTH
UNION SELECT 4 AS MONTH
UNION SELECT 5 AS MONTH
UNION SELECT 6 AS MONTH
UNION SELECT 7 AS MONTH
UNION SELECT 8 AS MONTH
UNION SELECT 9 AS MONTH
UNION SELECT 10 AS MONTH
UNION SELECT 11 AS MONTH
UNION SELECT 12 AS MONTH
) as meses
LEFT JOIN reportes ON month(re_fecha) = meses.MONTH
WHERE re_fecha BETWEEN '2017-01-01' AND '2017-08-31'
GROUP BY meses.MONTH, monthName(re_fecha)
これは私がMySQLの文で取得しています以下の結果である:
id_mes | total
---------------
04 | 15
05 | 5
06 | 15
07 | 2
Iこれが何らかの形で役立つかどうかは分かりませんが、私が "re_fechas ..."を使わないと、私たちが探しているものに近い結果が得られます:
id_mes | total
-------------
01 | 0
02 | 0
03 | 0
04 | 15
05 | 5
06 | 15
07 | 2
08 | 6
09 | 0
10 | 0
11 | 0
12 | 0
そして最後に、私が見てみたい:私は文を使用する場合は、「
:
id_mes | total ------------------- 01-2017 | 0 02-2017 | 0 03-2017 | 0 04-2017 | 15 05-2017 | 5 06-2017 | 15 07-2017 | 2 08-2017 | 6
は、私はそれが今どのように動作するかの2つの問題を抱えています指定された日付のレポートが0の月は表示されません。私が「どこで」使っていないなら、私はそれらをほしいと思う方法でほとんど物事を得るが、私が望む日付の範囲ではない。
私が持っていたもう1つの問題は、月の年を取得したいということです(上記のコードブロックで示されているように)。
私はデータベースを提供できるかどうかわからないんだけど、あなたはそれが役立つだろうと思うなら、私に知らせて、これはすべてを理解するのに十分な情報であると思います。
@Strawberryこれが面倒であってもOPは数ヶ月の変数の範囲を必要としない場合、それはかなり簡単です。そして、 'FULL OUTER JOIN'が必要ですが、MySQLでは持っていないので、LEFT JOINでエミュレートする必要があります。私はこの問題にアプローチする別の方法を追加して私の答えを更新しました。 – MiguelKVidal
Gotcha - 私の間違い。 – Strawberry
これは完全に機能します!私たちはそれを試して実装しました。私たちが望んでいるように動いています。私はその返事を感謝します。君たちありがとう。 –