1

次の列を含むテーブルがあります。

  • ID = 昇順の一意の識別子
  • ProductId = 製品の ID
  • rate1 ~ rate5 = 製品が 1 つ星、2 つ星、3 つ星、4 つ星、または 5 つ星の評価を受けた回数
  • aveRate = その商品の平均評価
  • lastSubDate = その商品のレビューが最後に送信された時刻

また、平均評価が 5 で、5 つ星評価の数が最も多く、最後のレビュー送信が過去 3 か月以内である ProductId を選択する SQL ステートメントを作成しようとしています。

テーブルは次の例のようになります。

ID  ProductId   rate1   rate2   rate3   rate4   rate5   aveRate     lastSubDate
18  9996637     0   0   0   0   1   5   2011-08-10 12:00:34
26  9996628     1   0   0   0   0   1   2010-05-06 05:45:05
34  9996618     0   0   0   1   0   4   2011-10-09 09:00:45
36  9996614     5   0   0   0   0   1   2011-01-05 09:30:32
48  9996592     5   0   1   0   3   3   2012-11-28 19:00:06
66  9996566     0   0   0   1   3   5   2011-04-06 06:45:34
70  9996562     0   0   0   1   1   5   2011-05-17 18:30:03

これは私がこれまでに得たクエリです:

SELECT `ProductId`,`rate5`,`aveRate`,`lastSubDate` 
FROM ratings 
WHERE `aveRate` = 5 AND `lastSubDate` > '24 Feb 2013' 
ORDER BY `rate5` DESC 
LIMIT 3

これは、平均評価が 5 である 5 つ星のレビューが最も多い製品を返しますが、結果を過去 3 か月に限定するわけではありません。このステートメントを修正して、過去 3 か月のみからのデータも選択するにはどうすればよいですか?

4

1 に答える 1

10

日付定数の形式が間違っています。一定の日付を使用している場合は、これを試してください。

... AND `lastSubDate` > '20130224'

20130224(引用符なしで) または'2013-02-24'上記を使用することもできます。MySQL の日付と時刻のリテラルのドキュメントを参照してください。

または、「3 か月前」を計算するには、次のようにします。

... AND `lastSubDate` > CURDATE() - INTERVAL 3 MONTH

最後に、ここではバッククォートは必要ありません。それらが気になる場合は、それらを削除できます。

... AND lastSubDate > whatever
于 2013-05-24T19:51:37.680 に答える