要以基于集合的方式(这是 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
Calendar 表可以采用您想要的任何形式,因此您可以在其中使用 UNIX 时间戳作为 start_time 和 end_time。您只需使用您可能想要使用的任何可能范围内的所有日期预先填充它。即使从 1900-01-01 到 9999-12-31 也不会是一张非常大的桌子。对于许多报告类型的查询,它可以派上用场。
最后,此代码是 T-SQL,因此您可能需要将 DATEPART 和 DATEADD 转换为 SQLite 中的任何等效项。