要以基于集合的方式(这是SQL擅长的)来实现这一点,您需要一个基于集合的时间增量表示。它可以是临时表、永久表或派生表(即子查询)。我对SQLite不太熟悉,而且我已经有一段时间没有使用UNIX了。UNIX中的时间戳是从某个设置的日期/时间开始的#秒?使用一个标准的日历表(在数据库中有这样的表很有用)。。。在SELECT
C1.start_time,
C2.end_time,
T.org,
COUNT(time)
FROM
Calendar C1
INNER JOIN Calendar C2 ON
C2.start_time = DATEADD(dy, 6, C1.start_time)
INNER JOIN My_Table T ON
T.time BETWEEN C1.start_time AND C2.end_time You'll need to convert to timestamp here
WHERE
DATEPART(dw, C1.start_time) = 1 AND Basically, only get dates that are a Sunday or whatever other day starts your intervals
C1.start_time BETWEEN @start_range_date AND @end_range_date Period for which you're running the report
GROUP BY
C1.start_time,
C2.end_time,
T.org
日历表可以采用任何形式,因此可以在其中使用UNIX时间戳来表示开始时间和结束时间。您只需预先填充您可能想要使用的任何可能范围内的所有日期。即使从1900-01-01到9999-12-31也不会是一张非常大的桌子。对于许多报告类型的查询,它可以派上用场。在
最后,这段代码是T-SQL,因此您可能需要将DATEPART和DATEADD转换为SQLite中的等效代码。在