1

我的第一个表的查询是:

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。

4

4 回答 4

0

试试这个查询

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))

小提琴演示

于 2013-10-22T09:35:19.780 回答
0

您需要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);
于 2013-10-22T07:08:52.720 回答
0

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)

供参考,请参阅此帖子

于 2013-10-22T09:10:33.790 回答
0

根据您的评论,您似乎在这两个查询中重复了行,并且您正在寻找设置的差异。如果你有一个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);

是你要找的吗?

于 2013-10-22T08:38:58.673 回答