用于处理日期的Sqlite查询

时间:2012-12-27 12:12:08

标签: android sqlite

我有这种格式的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

2 个答案:

答案 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;
}