私のMySQLデータベースには、MACアドレスと時刻(例:2012-4-30 23:00:00)を含むテーブル(例:T)があります。今週表示されたが前週には表示されなかったMACアドレスを除外したいと思います。
どうすればそれを一文で行うことができますか?複数選択を使用しようとしましたが、方法が見つかりませんでした。
前もって感謝します。
私のMySQLデータベースには、MACアドレスと時刻(例:2012-4-30 23:00:00)を含むテーブル(例:T)があります。今週表示されたが前週には表示されなかったMACアドレスを除外したいと思います。
どうすればそれを一文で行うことができますか?複数選択を使用しようとしましたが、方法が見つかりませんでした。
前もって感謝します。
を使用できますYEARWEEK
。
今週のレコードを取得するには:
SELECT * FROM T WHERE YEARWEEK(your_datetime_column) = YEARWEEK(NOW());
前の週のレコードのみを取得するには:
SELECT * FROM T WHERE YEARWEEK(your_datetime_column) < YEARWEEK(NOW());
テーブル構造がなければ、次のようなものを提案します。
SELECT [DISTINCT] Mac FROM table t
WHERE
t.Time BETWEEN '2012-01-09 00:00:00' AND '2012-01-16 23:59:59'
AND
NOT EXISTS (SELECT * FROM FROM table t2 WHERE t2.Mac = t.Mac AND T2.Time BETWEEN '2012-01-01 00:00:00' AND '2012-01-08 23:59:59'
今週はあるが前週はないMacアドレスを取得するには、次のようなものを使用できます。
SELECT *
FROM T
WHERE YEARWEEK(T.Time) = YEARWEEK(NOW())
AND T.MacAddress NOT IN (
SELECT MacAddress
FROM T AS T2
WHERE YEARWEEK(T2.Time) = YEARWEEK(TIMESTAMPADD(WEEK, -1, NOW())));
これは、bfavarettoがすでに提案しているようにYEARWEEK関数を使用し、 TIMESTAMPADD関数を使用して前の週を計算します。