2012-03-21 38 views
0

我正在努力改进我的程序中的例程,我计算同一日期的发生次数。 因此,也许一个例子:理货发生或子查询混乱

Time   Other_stuff Entry 
1332334357 ..... 
1332334367 ..... 
1332334386 ..... 

直到现在我用如下语句:

SELECT date(time, 'unixepoch') FROM reviewHistory 
     WHERE lastInterval <= 21 AND nextInterval > 21 

现在我基本上要产生落在同一日期的条目的直方图

2012-03-21 20 
2012-03-20 13 
2012-03-19 50 

依此类推。然而,我没有看到一个简单的方法来做到这一点,所以我想我会做一个SELECT DISTINCT并存储这些值,然后用条件查询每个不同的条目并检查行数。它可以节省处理时间和I/O访问时间,但是我一直无法找到完成此操作的语句。我认为这样的事情会起作用,但事实并非如此。例如:

SELECT time FROM reviewHistory WHERE 
(SELECT date(time, 'unixepoch') FROM reviewHistory 
     WHERE lastInterval <= 21 AND nextInterval > 21) = "2012-03-21" 

它没有错误,但是它也不会返回任何东西,我觉得相当肯定,这是一件我应该能够在几个SQLite的语句来完成,而不必管理应用端。

更新:大声笑它只是在我发布后才找到我。尽管我仍然相信有一种更优雅的方式来完成SQL中的计数问题。

SELECT time FROM 
     (SELECT date(time, 'unixepoch') AS time 
     FROM reviewHistory WHERE lastInterval <= 21 AND nextInterval > 21) 
    WHERE time = "2012-03-21" 

回答

1

我不知道如果我理解你的问题,但让所有日期和计数,一个查询应该就足够了:

SELECT date(time, 'unixepoch'), COUNT(*) 
FROM reviewHistory 
WHERE lastInterval <= 21 AND nextInterval > 21 
GROUP BY date(time, 'unixepoch') 
+0

噢,那是美丽的。这正是我所希望的,谢谢你。我想我误解了COUNT(*)在阅读时如何使用。 – Jeremy 2012-03-21 13:22:42