我的第一个表的查询是:
Select * from orders where edited_date<DATE_SUB(now(),interval 48 hour);
我的第二张表的查询是:
Select * from orders where edited_date<DATE_SUB(now(),interval 24 hour);
与第一个表相比,第二个表应仅显示过滤后的记录。我正在使用mysql。
试试这个查询
Select orderid from orders
where
edited_date<DATE_SUB(now(),interval 24 hour)
AND
orderid
NOT IN(Select orderid from orders where
edited_date<DATE_SUB(now(),interval 48 hour))
您需要BETWEEN
运算符在两个查询中排除重复项:
Select * from orders where edited_date BETWEEN DATE_SUB(now(),interval 24 hour) AND edited_date<DATE_SUB(now(),interval 48 hour);
Select * from orders where edited_date<DATE_SUB(now(),interval 48 hour);
MySQL 不支持 INTERSECT 和 MINUS 集合运算符。INTERSECT 运算符获取两个查询的结果并仅返回出现在两个结果集中的行。
MINUS 运算符获取一个查询的不同行并返回未出现在第二个结果集中的行。我们可以使用 JOIN 运算符重写这些查询:
使用 MINUS 运算符的示例查询:
SELECT x, y FROM table_a
MINUS
SELECT x, y FROM table_b;
在 MySQL 中:
SELECT a.x, a.y
FROM table_a a LEFT JOIN table_b b
ON a.x = b.x AND a.y = b.y
WHERE b.x IS NULL;
您可以在查询中尝试此逻辑。
Select a.*
from orders a LEFT JOIN orders b
ON a.column=b.column ---- add on condition
where a.edited_date<DATE_SUB(now(),interval 48 hour) and
b.edited_date<DATE_SUB(now(),interval 48 hour)
供参考,请参阅此帖子
根据您的评论,您似乎在这两个查询中重复了行,并且您正在寻找设置的差异。如果你有一个id
专栏,这很容易:
; WITH H48 AS (
SELECT * FROM orders WHERE edited_date<DATE_SUB(now(),interval 48 hour)
), H24 AS (
SELECT * FROM orders WHERE edited_date<DATE_SUB(now(),interval 24 hour)
)
SELECT * FROM H48 WHERE id NOT IN (SELECT id FROM H24);
是你要找的吗?