0

mySQL を使用して、指定された日付範囲のフィールド「重み」の週平均を取得しようとしています。ここでの作業のスパナは、一部のレコードでは重量が Kg で保存され、他のレコードではポンドで保存されていることです。テーブルには、重量がメートル法かインペリアル法かを指定するフラグ (unitsMode) もあります。したがって、unitsMode に基づいて weight フィールドで計算を実行する必要があります。これは CASE を使用して実行しています。でも今は平均が取れないというか、「どこで」平均をとればいいのかわからない。これをストアド プロシージャとして実行しています。現在のコードは次のとおりです。

PROCEDURE `weeklyweighttest`(IN uId INTEGER, IN rangeStart DATE, IN rangeEnd DATE)
BEGIN
select weight,unitsMode, floor(DATEDIFF(entryDate,curdate())/7) as weeks_ago, CASE unitsMode
          WHEN 1 THEN truncate((weight/2.2),2)
          WHEN 0 THEN truncate(weight,2)
         END  AS calcWeight
 FROM `mydatabasetable` WHERE userId=uId AND entryDate >= rangeStart AND entryDate <= rangeEnd
 GROUP BY floor(DATEDIFF(entryDate,curdate())/7);
END

ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

0

AVGcase ステートメントの前後に配置してみてください。

 AVG(CASE unitsMode
         WHEN 1 THEN truncate((weight/2.2),2)
         WHEN 0 THEN truncate(weight,2)
     END) AS calcWeight
于 2013-03-14T13:50:53.350 に答える