1

私の最初のテーブルのクエリは次のとおりです。

Select * from orders where edited_date<DATE_SUB(now(),interval 48 hour);

2 番目のテーブルのクエリは次のとおりです。

Select * from orders where edited_date<DATE_SUB(now(),interval 24 hour);

2 番目のテーブルには、最初のテーブルと比較して、フィルター処理されたレコードのみが表示されます。私は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

あなたのコメントに基づいて、これら 2 つのクエリで行を繰り返しており、セットの違いを探しているようです。列を取得した場合、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 に答える
0

MySQL は、INTERSECT および MINUS セット演算子をサポートしていません。INTERSECT 演算子は、2 つのクエリの結果を取得し、両方の結果セットに含まれる行のみを返します。

MINUS 演算子は、1 つのクエリの個別の行を取得し、2 番目の結果セットに表示されない行を返します。これらのクエリは、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

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 に答える