You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用T-SQL查询60天未发起数据库查询的计算机名称

解决方法

要筛选出60天内没有任何查询的计算机,核心是先找出每台计算机的最新查询时间,再判断这个时间是否早于60天前,最后提取符合条件的计算机名称。

方法一:GROUP BY + HAVING 子句

这是最直接的实现方式,先按计算机名称分组,计算每组的最新查询时间,再筛选出最新时间超过60天的组:

SELECT computer_name
FROM queries
GROUP BY computer_name
HAVING MAX(date_time) < DATE_SUB(NOW(), INTERVAL 60 DAY);

如果你的date_time是字符串格式(比如示例中的20240508000000),需要先转换成日期类型再计算:

SELECT computer_name
FROM queries
GROUP BY computer_name
HAVING MAX(STR_TO_DATE(date_time, '%Y%m%d%H%i%s')) < DATE_SUB(NOW(), INTERVAL 60 DAY);

方法二:子查询获取最新时间

如果对GROUP BY逻辑不太熟悉,也可以用子查询先提取每台计算机的最新查询记录,再筛选时间条件:

SELECT q.computer_name
FROM (
    SELECT computer_name, MAX(date_time) AS last_query_time
    FROM queries
    GROUP BY computer_name
) q
WHERE q.last_query_time < DATE_SUB(NOW(), INTERVAL 60 DAY);

针对字符串格式的时间,同样需要转换:

SELECT q.computer_name
FROM (
    SELECT computer_name, MAX(STR_TO_DATE(date_time, '%Y%m%d%H%i%s')) AS last_query_time
    FROM queries
    GROUP BY computer_name
) q
WHERE q.last_query_time < DATE_SUB(NOW(), INTERVAL 60 DAY);

补充:包含从未发起过查询的计算机

如果你的系统中有一张记录所有计算机的表(比如命名为computers),可以同时找出在queries表中完全没有记录的计算机,合并两种情况:

SELECT c.computer_name
FROM computers c
LEFT JOIN (
    SELECT computer_name, MAX(date_time) AS last_query_time
    FROM queries
    GROUP BY computer_name
) q ON c.computer_name = q.computer_name
WHERE q.last_query_time IS NULL 
   OR q.last_query_time < DATE_SUB(NOW(), INTERVAL 60 DAY);

原语句的问题说明

你写的WHERE date_time > 20240508000000是筛选单条查询记录时间晚于指定日期的行,会返回所有符合该时间条件的记录,而非按计算机整体判断是否60天无查询。我们需要先按计算机聚合数据,判断其最后一次查询是否在60天前,这才是你需要的结果。

内容的提问来源于stack exchange,提问作者Korgon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:34:56