1

とにかく、少なくとも私にとっては、これは本当に奇妙な人です。

過去数か月の上位数エンティティとそれに関連するレコード数の統計を取得するクエリがあります。

すべて正常に動作しますが、Junes の結果が表示されません。クエリは正常に実行されていますが、Junes の結果は得られません。

次のいずれかを実行すると、再び機能し始めます。

  1. IN 句で使用されるのとまったく同じリストを返すサブクエリを使用して、代わりに IN 句を結合に変更します。
  2. 私が確認したように不要な週番号をグループに追加すると、レコードの MonthNumber が正しく解決されます。

しかし、クエリにパッチを当てるだけでなく、なぜこれが起こっているのかを知りたいのです。ここで私の目には、私が持っているクエリが機能するはずです。

SELECT
YEAR(FROM_UNIXTIME(mt.`date_created`)) AS 'Year',
MONTH(FROM_UNIXTIME(mt.`date_created`)) AS 'MonthNumber',
MONTHNAME(FROM_UNIXTIME(mt.`date_created`)) AS 'MonthName',
WEEKOFYEAR(FROM_UNIXTIME(mt.`date_created`) ) AS 'Week',
`at`.`group_name`,
COUNT(`mt`.`mt_id_pk`) AS 'record_count' 
FROM
`my_table` AS `mt` 
INNER JOIN `another_table` AS `at` ON `mt`.`at_id_fk` = `at`.`at_id_pk` 
WHERE `at`.`group_name` IN ('something1','something2','something3')
GROUP BY `at`.`group_name`, `MonthNumber`
HAVING  `Year` = YEAR(NOW())
ORDER BY `MonthNumber` DESC
4

1 に答える 1

1

YEAR() は集計関数ではないため、HAVING 句には使用しないでください。代わりに次のようにする必要があります。

SELECT
YEAR(FROM_UNIXTIME(mt.`date_created`)) AS 'Year',
MONTH(FROM_UNIXTIME(mt.`date_created`)) AS 'MonthNumber',
MONTHNAME(FROM_UNIXTIME(mt.`date_created`)) AS 'MonthName',
WEEKOFYEAR(FROM_UNIXTIME(mt.`date_created`) ) AS 'Week',
`at`.`group_name`,
COUNT(`mt`.`mt_id_pk`) AS 'record_count' 
FROM
`my_table` AS `mt` 
INNER JOIN `another_table` AS `at` ON `mt`.`at_id_fk` = `at`.`at_id_pk` 
WHERE `at`.`group_name` IN ('something1','something2','something3')
AND YEAR(FROM_UNIXTIME(mt.`date_created`)) = YEAR(NOW())
GROUP BY `at`.`group_name`, `MonthNumber`
ORDER BY `MonthNumber` DESC
于 2013-06-07T11:39:53.187 に答える