我有这种格式的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
那么可能的sqlite查询根据FarmerCode找到两个月之间的差异和相应的平均值,找到平均值的公式
average = (value1+value2)/diffrence of months
答案 0 :(得分: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
,每个不同的FarmerCode
值会得到一个结果行。因此,sum()
,min()
和max()
会聚合所有行的值FarmerCode
。如果每个min()
值有两行,则此查询中的max()
和FarmerCode
构造正常工作。
答案 1 :(得分: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;
}