我的SQL技能不足以解决这个问题,希望有人能提供帮助。这在Android的SQLite上:

我有一个表“尝试”:

attempt_id | word | score | attempt_time
----------------------------------------
1          | w1   | 1     | 2011-09-01
2          | w1   | 2     | 2011-09-02
3          | w2   | 1     | 2011-09-02
4          | w3   | 1     | 2011-09-03
5          | w4   | 0     | 2011-09-03
6          | w1   | 0     | 2011-09-04


每个单词都有与之相关的分数;我想查找每天得分> = 1的单词数。分数是每天保存的,因此t天的分数应反映在t + 1天。当一个单词的得分为0时,不应将其计算在内。结果应如下所示:

attempt_time | count(word)
--------------------------
2011-09-01   | 1              // w1 (1)
2011-09-02   | 2              // w1, w2 (2)
2011-09-03   | 3              // w1, w2, w3 (3)
2011-09-04   | 2              // w2, w3 (2) (w1 now has score 0)


try_times有很多,所以您不能单独遍历它们。我怀疑我需要使用子查询将每个日期和以前的日期相加,但仍然需要一种丢弃重复项的方法(例如,仅对w1计数一次)。

它应该执行以下操作,但需要所有日期,而不仅仅是一个日期:

select count(distinct word) from attempts where score > 0
and attempt_time <= '2011-09-03';

> 3


我的替代方法是构建一个单独的表,该表仅跟踪每天的总数,但随后必须保持数据同步。

非常感谢。

编辑:我试图添加一些更多的细节,以使问题更加清楚。希望能帮助到你。

最佳答案

如果您需要汇总和显示基于日期的计数,则需要使用“分组依据”子句。试用以下语法。

Select attempt_time, count(*) from attempts where score > 0 group by attempt_time


这是有人解决类似问题的另一个示例。
SELECT *, COUNT(*) in SQLite

关于android - 如何使用SQL查找特定时间范围内的条目总数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7381286/

10-09 06:21
查看更多