如何按小时查询SQLite数据?
How to query SQLite data hourly?
数据 table 如下所示:
ID DATE
1 2020-12-31 10:10:00
2 2020-12-31 20:30:00
3 2020-12-31 20:50:00
4 2021-01-02 17:10:00
5 2021-01-02 17:20:00
6 2021-01-02 17:30:00
7 2021-01-03 23:10:00
..
我只想查询每天每小时的最后一个条目,并得到如下结果:
ID DATE
1 2020-12-31 10:10:00
3 2020-12-31 20:50:00
6 2021-01-02 17:30:00
7 2021-01-03 23:10:00
..
我尝试查找每小时查询并找到以下内容
strftime('%H', " + DATE + ", '+1 hours')
但是,不确定如何正确使用它(例如,使用 GROUP BY ?然后如何确保它采用该小时的最新条目),因此,在这里得到一些帮助会很棒!
您可以使用 ROW_NUMBER() window 函数:
SELECT ID, DATE
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY strftime('%Y%m%d%H', DATE) ORDER BY DATE DESC) rn
FROM tablename
)
WHERE rn = 1
ORDER BY ID
代替strftime('%Y%m%d%H', DATE)
你也可以使用substr(DATE, 1, 13)
.
对于 3.25.0 之前不支持 window 函数的 SQLite 版本,您可以使用 NOT EXISTS:
SELECT t1.*
FROM tablename t1
WHERE NOT EXISTS (
SELECT 1
FROM tablename t2
WHERE strftime('%Y%m%d%H', t2.DATE) = strftime('%Y%m%d%H', t1.DATE)
AND t2.DATE > t1.DATE
)
参见demo。
结果:
> ID | DATE
> -: | :------------------
> 1 | 2020-12-31 10:10:00
> 3 | 2020-12-31 20:50:00
> 6 | 2021-01-02 17:30:00
> 7 | 2021-01-03 23:10:00
数据 table 如下所示:
ID DATE
1 2020-12-31 10:10:00
2 2020-12-31 20:30:00
3 2020-12-31 20:50:00
4 2021-01-02 17:10:00
5 2021-01-02 17:20:00
6 2021-01-02 17:30:00
7 2021-01-03 23:10:00
..
我只想查询每天每小时的最后一个条目,并得到如下结果:
ID DATE
1 2020-12-31 10:10:00
3 2020-12-31 20:50:00
6 2021-01-02 17:30:00
7 2021-01-03 23:10:00
..
我尝试查找每小时查询并找到以下内容
strftime('%H', " + DATE + ", '+1 hours')
但是,不确定如何正确使用它(例如,使用 GROUP BY ?然后如何确保它采用该小时的最新条目),因此,在这里得到一些帮助会很棒!
您可以使用 ROW_NUMBER() window 函数:
SELECT ID, DATE
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY strftime('%Y%m%d%H', DATE) ORDER BY DATE DESC) rn
FROM tablename
)
WHERE rn = 1
ORDER BY ID
代替strftime('%Y%m%d%H', DATE)
你也可以使用substr(DATE, 1, 13)
.
对于 3.25.0 之前不支持 window 函数的 SQLite 版本,您可以使用 NOT EXISTS:
SELECT t1.*
FROM tablename t1
WHERE NOT EXISTS (
SELECT 1
FROM tablename t2
WHERE strftime('%Y%m%d%H', t2.DATE) = strftime('%Y%m%d%H', t1.DATE)
AND t2.DATE > t1.DATE
)
参见demo。
结果:
> ID | DATE
> -: | :------------------
> 1 | 2020-12-31 10:10:00
> 3 | 2020-12-31 20:50:00
> 6 | 2021-01-02 17:30:00
> 7 | 2021-01-03 23:10:00