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 的两个月是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 和相应的平均值查找两个月之间的差异的可能的 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;

By using GROUP BY FarmerCode you get one result row per different FarmerCode value. sum(), min(), and max() aggregates therefore all values of rows with equal FarmerCode. The min() and max() construct in this query works properly, if there are two rows for each FarmerCode value.

于 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 回答