在时间块内获取不同的值

Get distinct values within time chunks

我有一个 table 来自实地调查的不同物种及其出现(时间戳):

species | timestamp
A       | 2021-04-01T12:35
A       | 2021-04-01T12:36
B       | 2021-04-01T12:36
A       | 2021-04-01T12:37
A       | 2021-04-01T12:39
C       | 2021-04-01T12:40
B       | 2021-04-01T12:42
C       | 2021-04-01T12:44
C       | 2021-04-01T12:44
B       | 2021-04-01T12:47

现在我想计算它们,不是总计,而是每次 10 分钟,其中只计算第一次出现的次数。 这意味着在 12:31 和 12:40 之间存在物种 A、B、C。在12:41和12:50之间有物种B,C。

对于单个 10 分钟的块,我可以做类似的事情

SELECT DISTINCT(species) 
FROM table
WHERE timestamp IS <condition>

但我需要的是:

chunk_start_time | chunk_end_time   | species 
2021-04-01T12:31 | 2021-04-01T12:40 | A       
2021-04-01T12:31 | 2021-04-01T12:40 | B       
2021-04-01T12:31 | 2021-04-01T12:40 | C       
2021-04-01T12:41 | 2021-04-01T12:50 | B       
2021-04-01T12:41 | 2021-04-01T12:50 | C       

我的时间戳没有秒。这就是为什么它是 x1 到 x0 分钟的原因。 我怎样才能在 SQLite 中进行数学运算,或者我应该更好地使用 Python pandas?

使用日期时间函数strftime()生成块:

SELECT DISTINCT
       strftime(
         '%Y-%m-%dT%H:%M', 
         timestamp, 
         '-' || CASE WHEN timestamp LIKE '%0' THEN 9 ELSE SUBSTR(timestamp, -1) - 1 END || ' minute'
       ) chunk_start_time,
       strftime(
         '%Y-%m-%dT%H:%M', 
         timestamp, 
         '+' || CASE WHEN timestamp LIKE '%0' THEN 0 ELSE 10 - SUBSTR(timestamp, -1) END || ' minute'
       ) chunk_end_time,
       species
FROM tablename
ORDER BY chunk_start_time, species;

参见demo