2

Sqlite DB にこの形式のデータがあります。

  month     year     FarmerCode     Value
   12       2012        1             10
   9        2012        1             25
   12       2012        2             5
   10       2012        2             12
   ..........
   ..........

FarmerCode に関する平均値を見つけなければなりません。FarmerCode 1 の場合、2 か月は12 and 9. だから違いは12 - 9 = 3

そして、average = (25+10)/diffrence(which is 3 here)

これを見つけるためのクエリは何でしょうか?

そして最後に、ここに示すように日付が来年に移動した場合

  month     year     FarmerCode     Value

   1        **2013**        4             20
   10       **2012**        4             50   

今回は仕方ない1-10

それでは、FarmerCode と対応する平均に従って 2 か月間の差を見つけるための可能な sqlite クエリは何でしょうか。平均を見つける式は次のようになります。

average = (value1+value2)/diffrence of months
4

2 に答える 2

2

アイデア

トリックは、年に 12 を掛けて、それを月に足すことです。

(2013*12+1)-(2012*12+10) = 3

SQL クエリ:

これについて sqlite でテストされた動作中の SQL クエリは次のとおりです。

SELECT 
    FarmerCode, 
    SUM(value) / (MAX(12 * year + month) - MIN(12 * year + month)) 
FROM 
    t 
GROUP BY 
    FarmerCode;

を使用すると、異なる値GROUP BY FarmerCodeごとに 1 つの結果行が得られます。、、およびは、等しい を持つ行のすべての値を集約します。各値に 2 つの行がある場合、このクエリのandコンストラクトは適切に機能します。FarmerCodesum()min()max()FarmerCodemin()max()FarmerCode

于 2012-12-27T12:28:59.523 に答える
1

次に、このメソッドを使用して月の差を見つけることができます

private int monthsdiff(int m1,int year1, int m2,int year2)
{
    int yeardiff = year2 - year1;
    int mondiff  = m2 - m1;
    mondiff = yeardiff*12+mondiff;
    return mondiff;
}
于 2012-12-27T12:19:00.283 に答える