在时间块内获取不同的值
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。
我有一个 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。