每分钟一行获取最近10分钟的数据[SQLite]

问题描述 投票:0回答:2

我需要在 SQLite 中的 SELECT 子句中获取最近 10 分钟的数据,每分钟一条数据,例如这样:

06/12/2021 11:37:00 ...
06/12/2021 11:38:00 ...
06/12/2021 11:39:00 ...
06/12/2021 11:40:00 ...
06/12/2021 11:41:00 ...
sql sqlite
2个回答
1
投票

你可以尝试一下:

SELECT * FROM your_table WHERE your_column >= datetime('now', '-10 minutes', 'localtime');

另请查看 https://www.sqlite.org/lang_datefunc.html


0
投票

假设你有:

  • 一张桌子 你的桌子
  • 主键列 id
  • your_table 中的日期时间列称为 dt_column
并且您想要一个返回数据的查询,其中:

  • dt_column等于最近10分钟内的时间
  • 没有两行的
  • dt_column 具有相同的分钟
您可以使用以下查询

(在 SQLITE 数据库中)

SELECT * FROM your_table WHERE id IN ( SELECT MIN(id) FROM your_table GROUP BY strftime('%Y-%m-%d %H:%M', dt_column) ) AND dt_column >= datetime('now', '-10 minutes');
这使用了 Sqlite 的 strftime() 函数,该函数是为了模仿 C 的同名函数而设计的。更多信息

这里

请注意,如果原始表中从该分钟起没有任何行,您将不会在输出中看到任何行。

高级

我还想看看是否可以提出一个执行类似任务的查询,但我不想将答案限制为每分钟最多 1 行,而是希望每

n 秒最多 1 行。这是我想出的似乎有效的方法:

SELECT * FROM your_table WHERE id IN ( SELECT MIN(id) FROM your_table GROUP BY strftime ( '%Y-%m-%d %H:%M:%S', dt_column, printf('-%d seconds', strftime("%s", dt_column) % n) ) ) AND dt_column >= datetime('now', '-10 minutes');
请注意,这里我使用的是 

%s,即自 Jan 1 1970 以来的秒数,而不是 %S,即自分钟开始以来的秒数。

记得设置

n

© www.soinside.com 2019 - 2024. All rights reserved.