首页 > 解决方案 > SQLITE 选择不到 1 分钟的不同条目

问题描述

我正在制作一个需要从 sql lite db 中提取实时数据的航班跟踪地图。我目前只是使用 sqlite 可执行文件来导航数据库并了解如何与之交互。每架飞机都由一个唯一的 hex_ident 标识。我想获取在最后一分钟发出信号的所有飞机的列表,以识别哪些飞机现在实际上处于活动状态。我试过了

select distinct hex_ident, parsed_time 
from squitters 
where parsed_time >= Datetime('now','-1 minute')

我预计只有 4 或 5 个 hex_idents 的列表,但我只是得到每个条目的列表(仅限今天的条目),有些超出 1 分钟的界限。我是 sql 新手,所以我还不知道该怎么做。这是每个条目的样子。这张桌子被称为squitters。

{
"message_type":"MSG",
"transmission_type":8,
"session_id":"111",
"aircraft_id":"11111",
"hex_ident":"A1B4FE",
"flight_id":"111111",
"generated_date":"2021/02/12",
"generated_time":"14:50:42.403",
"logged_date":"2021/02/12",
"logged_time":"14:50:42.385",
"callsign":"",
"altitude":"",
"ground_speed":"",
"track":"",
"lat":"",
"lon":"",
"vertical_rate":"",
"squawk":"",
"alert":"",
"emergency":"",
"spi":"",
"is_on_ground":0,
"parsed_time":"2021-02-12T19:50:42.413746"
}

有任何想法吗?

标签: sqlite

解决方案


您必须'T'从 value 中删除parsed_time或使用datetime()它才能进行比较:

where datetime(parsed_time) >= datetime('now', '-1 minute')

请注意,该datetime()函数不考虑微秒,因此如果您需要 100% 的准确度,则必须将它们串联在代码中:

where replace(parsed_time, 'T', ' ') >= 
      datetime('now', '-1 minute') || substr(parsed_time, instr(parsed_time, '.')) 

推荐阅读