在我的 MySQL 数据库中,我有一个带有 mac 地址和时间的表(例如 T)(例如,2012-4-30 23:00:00)。我想过滤掉本周出现的那些mac地址,但上周没有出现。
我怎么能用一句话做到这一点?我尝试使用多项选择,但没有找到方法。
提前致谢。
在我的 MySQL 数据库中,我有一个带有 mac 地址和时间的表(例如 T)(例如,2012-4-30 23:00:00)。我想过滤掉本周出现的那些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函数来计算前一周。