過去2日間、私はこれを理解しようとしてきました。これは私が簡単だと思っていたものですが、私の人生にとって必要なSQLクエリを理解することはできません。私はいくつかの関連する質問/答えを見つけましたが、まさに私が取り組んでいるものではありません。過去7日間のMySQLカウントレコードをレコード別にグループ化し、ゼロレコードで集計しました。
私は週の過去7日間のレコード数を取得し、ブランチロケーション別にグループ化し、レコードが見つからない場合は0を含めようとしています。誰もが言ったことの1つは、カレンダー/日付ヘルパー・テーブルを生成し、それを結合する必要があるということです。私は行ってこれをやって、今は2000-01-01
と2040-01-01
の間の日付のカレンダーテーブルを持っています。のは、それが現在2017-04-07
だというふりをしてみましょう
Records | location | date | thing | |----------|------------|---------| | Branch 1 | 2017-04-01 | Thing 1 | | Branch 2 | 2017-04-03 | Thing 2 | | Branch 1 | 2017-04-03 | Thing 3 | | Branch 1 | 2017-04-01 | Thing 4 | | Branch 3 | 2017-04-01 | Thing 5 | | Branch 3 | 2017-04-02 | Thing 6 | | Branch 1 | 2017-04-02 | Thing 7 | | Branch 2 | 2017-04-07 | Thing 8 |
:ここ
は、私のテーブル構造は次のようになります。 2017-04-01
と2017-04-07
を含むすべての日付がレコードテーブルにあるわけではないので、私はカレンダーヘルパーテーブルが必要でした。それは、私は次の出力を取得しようとしている、言われている:
Output | location | date | count(things)| |----------|------------|--------------| | Branch 1 | 2017-04-01 | 2 | | Branch 1 | 2017-04-02 | 1 | | Branch 1 | 2017-04-03 | 1 | | Branch 1 | 2017-04-04 | 0 | | Branch 1 | 2017-04-05 | 0 | | Branch 1 | 2017-04-06 | 0 | | Branch 1 | 2017-04-07 | 0 | | Branch 2 | 2017-04-01 | 0 | | Branch 2 | 2017-04-02 | 0 | | Branch 2 | 2017-04-03 | 1 | | Branch 2 | 2017-04-04 | 0 | | Branch 2 | 2017-04-05 | 0 | | Branch 2 | 2017-04-06 | 0 | | Branch 2 | 2017-04-07 | 1 | | Branch 3 | 2017-04-01 | 1 | | Branch 3 | 2017-04-02 | 1 | | Branch 3 | 2017-04-03 | 0 | | Branch 3 | 2017-04-04 | 0 | | Branch 3 | 2017-04-05 | 0 | | Branch 3 | 2017-04-06 | 0 | | Branch 3 | 2017-04-07 | 0 |
ので、ゼロの記録があったとしても、私はまだ(過去7日間)場所と日付の行を表示したいです。これは達成可能ですか?どちらのクエリは私が探しているものに似ても似つかない、同じ結果が得られ
SELECT
`records`.`location`,
`calendar`.`date`,
COUNT(`records`.`thing`) AS `count`
FROM `records`
RIGHT JOIN `calendar` ON `records`.`date` = `calendar`.`date`
WHERE `calendar`.`date` >= '2017-04-01' AND `calendar`.`date` <= '2017-04-07'
GROUP BY `calendar`.`date`, `records`.`location`
ORDER BY `records`.`location` ASC, `calendar`.`date` ASC
と
SELECT
`records`.`location`,
`date`.`ymd`,
COUNT(`records`.`thing`) AS `count`
FROM (
SELECT
`calendar`.`date` AS `ymd`
FROM `calendar`
WHERE `calendar`.`date` >= '2017-04-01' AND `calendar`.`date` <= '2017-04-07'
) `date`
LEFT JOIN `records` ON `date`.`ymd` = `records`.`date`
GROUP BY `records`.`location`, `date`.`ymd`
:ここ
は、私はいじりてきたクエリですために。
助けてください!
ブランチ/ロケーションテーブルはありますか? – Sal