mysql连接表,仅返回基于时间戳比较的行
我在mysql数据库中有一个表,如:simplified,以表明我的观点mysql连接表,仅返回基于时间戳比较的行,mysql,sql,Mysql,Sql,我在mysql数据库中有一个表,如:simplified,以表明我的观点 PARENT ID | EXPIRE | ITEM 0 | 1000 | FOO 1 | 2000 | BAR 以及与表a具有一对多关系的另一个 ITEMS ID | FK | TIMESTAMP 0 | 0 | 1488555058 1 | 0 | 1488555059 2 | 0 | 1488555060 考虑到ITEMS表正在不断地填充具有
PARENT
ID | EXPIRE | ITEM
0 | 1000 | FOO
1 | 2000 | BAR
以及与表a具有一对多关系的另一个
ITEMS
ID | FK | TIMESTAMP
0 | 0 | 1488555058
1 | 0 | 1488555059
2 | 0 | 1488555060
考虑到ITEMS表正在不断地填充具有当前时间戳的新值。我想查询db并只返回ITEMS表中不包含时间戳>=CURRENT_TIME-EXPIRE_TIME的记录的记录,因此结果将仅是自过期时间过后未收到新项的父项
我写了一篇不起作用的文章:
select P.ID
from PARENT as P
JOIN ITEMS as I
ON I.FX =
(
SELECT I2.FK
FROM ITEMS as I2
WHERE P.ID = I2.FK
AND ((((UNIX_TIMESTAMP()* 1000) - I2.TIMESTAMP))) > P.EXPIRE
ORDER BY TIMESTAMP DESC
limit 1
)
我想要的是,如果每个父项作为一个时间戳大于UNIX_时间戳的项过期,并且每个项都有一条记录而没有一条,则返回零行
卡住-任何帮助将不胜感激
编辑-根据下面的答案,这是一个工作查询-我在这里需要的是一个结果,其中包含的项目没有比过期时间新的项目,并将其标记为批处理
UPDATE PARENT P
SET BATCHID = ?
where not exists(
select 1 from ITEMS V
WHERE V.FK = P.ID
AND ((((UNIX_TIMESTAMP() * 1000) - V.TIMESTAMP) / 1000) < P.EXPIRE)
AND P.BATCHID is NULL
ORDER BY P.PROCESSEDTIMESTAMP ASC
)
这是一个令人困惑的join语句。我将使用不存在这样的:
select *
from Parent as p
where not exists (
select 1
from Items
where FK = p.ID
and TIMESTAMP > ((UNIX_TIMESTAMP()* 1000) - p.EXPIRE)
)
这是一个令人困惑的join语句。我将使用不存在这样的:
select *
from Parent as p
where not exists (
select 1
from Items
where FK = p.ID
and TIMESTAMP > ((UNIX_TIMESTAMP()* 1000) - p.EXPIRE)
)
谢谢这引导我在正确的方向-最终结果在编辑你得到了它,你也可以摆脱秩序,由在子选择。它没有任何效果,将使您的查询更快。谢谢这引导我在正确的方向-最终结果在编辑中您得到了它,您也可以通过在子选择中取消订单。它没有任何效果,将使您的查询更快。