用于计算按周分组的行的SQLite表达式

时间:2009-10-30 18:41:56

标签: sql sqlite

我有一张表,唯一相关的列是completionDate,这是一个项目标记为完成的纪元之后的秒数。我想做一个select语句来计算完成的项目数,按标记完成的那一周分组。到目前为止,我有这样的事情:

SELECT (completionDate-min)/(60*60*24*7)
FROM 
    (SELECT min(completionDate) AS min
     FROM TASK)
LEFT JOIN task;

返回以下结果:

0
2
2
2
3
3
3

这意味着第一周完成了1项,第3周和第4周完成了3项。

我可以以编程方式(特别是本周开始)为min寻找更好的价值。我真正需要的是一种按结果分组并计算结果数量的方法。理想的结果是:

0|1
2|3
3|3

我的下一步是试试这个:

SELECT COUNT(idx)
FROM
    (SELECT ((completionDate-min)/(60*60*24*7)) AS idx
    FROM
         (SELECT min(completionDate) AS min
         FROM TASK)
    LEFT JOIN task)
GROUP BY idx;

哪种结果看起来有点正确,但却以我不理解的方式出错:

0
1
3
3

此时,我只是卡住了。我承认我的SQL不是很好,所以对我所拥有的任何优化也会受到赞赏。

3 个答案:

答案 0 :(得分:2)

SELECT (completionDate - min) / (60*60*24*7) AS week,
       COUNT(*) AS count
FROM task, (SELECT MIN(completionDate) AS min FROM task)
GROUP BY week
HAVING completionDate NOT NULL;

答案 1 :(得分:1)

Source of data:

  

SELECT strftime('%Y%W',date_col)AS w,other_data FROM my_table GROUP   by w

See http://sqlite.org/lang_datefunc.html for usage. That doc also
includes some caveats related to precision and locale, etc.

答案 2 :(得分:0)

想出来。有一些空值。添加了WHERE completoinDate NOT NULL

SELECT idx, COUNT(idx)
FROM
    (SELECT ((completionDate-min)/(60*60*24*7)) AS idx
    FROM
         (SELECT min(completionDate) AS min
         FROM TASK)
    LEFT JOIN task WHERE completionDate NOT NULL)
GROUP BY idx;

如果能以任何方式进行优化,请让我知道。