Sqlite 使用触发器维护每日最大值列表
我正在开发一个应用程序,在10秒内从少量传感器中检索数据。这些值存储在单表sqlite数据库中 此应用程序的一个用例是打印每个传感器的每日最大读数 我不喜欢每次我想检索这些值时都发出一个类似于Sqlite 使用触发器维护每日最大值列表,sqlite,triggers,Sqlite,Triggers,我正在开发一个应用程序,在10秒内从少量传感器中检索数据。这些值存储在单表sqlite数据库中 此应用程序的一个用例是打印每个传感器的每日最大读数 我不喜欢每次我想检索这些值时都发出一个类似于MAX…GROUP BY day的查询,所以我想维护第二个包含这些每日最大值的表 这是执行此类任务的适当方式吗 我试着写了这样一个触发器,但没有成功。不知何故,我无法在新值和db中已存在的当前小时的值之间进行比较(如果新小时刚刚开始,则可能没有值) 你说你更喜欢扳机;这很难反驳 如果您想知道一个技术原因:
MAX…GROUP BY day
的查询,所以我想维护第二个包含这些每日最大值的表
select lW…
子查询返回NULL
值。
与NULL
进行任何比较都将导致NULL
,这使得案例
返回其他
值,即NULL
。
您必须将子查询包装到调用中案例
简化为MAX
:
... VALUES (
strftime('%Y-%m-%d 00:00:00', 'now'),
new.device_id,
max(new.lW,
ifnull((SELECT lW
FROM maxima
WHERE device_id = new.device_id
AND time = strftime('%Y-%m-%d 00:00:00', 'now')
),
0)
)
)
这正是我想要的,我会测试它并接受你的答案
... VALUES (
strftime('%Y-%m-%d 00:00:00', 'now'),
new.device_id,
max(new.lW,
ifnull((SELECT lW
FROM maxima
WHERE device_id = new.device_id
AND time = strftime('%Y-%m-%d 00:00:00', 'now')
),
0)
)
)