我有一張來自實地調查的不同物種及其出現次數(時間戳)的表格:
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 嗎?
uj5u.com熱心網友回復:
使用 datetime 函式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;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/417999.html
標籤:
