我有一张桌子,里面装满了飞机变速箱。我的名为 active 的视图返回一个唯一标识符列表 (hex_ident) 并将它们放在列 d_active_hex 中。从这个视图中,我想将它与我的表连接起来,并返回包含每个活动 hex_ident 的 lat、lon、alt 数据的最新传输。我的活动视图工作正常,但是当我知道应该有多个时,我的第二个视图只返回一个条目,最多并包括但不一定是活动 hex_idents 的数量。这是请求。
cur.execute("""
CREATE VIEW IF NOT EXISTS activepos AS
SELECT hex_ident,max(parsed_time),lat,lon,altitude
FROM squitters JOIN active
ON squitters.hex_ident = active.d_hex_ident AND transmission_type = 3;
""")
我目前正在将名为 active 的视图的结果添加到 python 中的列表中,然后循环遍历列表并对每个列表项发出单独的请求,如下所示
SELECT hex_ident,max(parsed_time),lat,lon,altitude
FROM squitters
WHERE hex_ident = ? AND transmission_type = 3
产生了预期的结果,但这似乎效率低下,我宁愿简化我的代码并同时学习如何在 sql 中执行此操作。弄乱它,似乎 max(parsed_time) 是问题,因为它从每次传输中选择最新的传输,而不是每个 hex_ident 的最新传输,但不确定如何实现我想要的。
有什么想法吗?
答案 0 :(得分:1)
我怀疑您想按 hex_ident
分组:
CREATE VIEW IF NOT EXISTS activepos AS
SELECT s.hex_ident, MAX(parsed_time) parsed_time, lat, lon, altitude
FROM squitters s JOIN active a
ON s.hex_ident = a.d_hex_ident
WHERE transmission_type = 3
GROUP BY s.hex_ident
此外,您应该使用包含它们的表名/别名来限定所有列名。在我的代码中,我将无法识别表别名的所有列保留为不合格。