我有以下SQL语句,我认为可以在领域中加以改进(我相信可能有一种方法可以使用where over how,但我不确定如何使用,而且我确定有一种方法可以引用having子句中最后一次更新的列,但我不确定如何进行)。如有任何建议,将不胜感激:
/* Show indexes that haven't had statistics updated in two days or more */
select
t.name as [Table Name],
min(convert(CHAR(11),stats_date(t.object_id,s.[stats_id]),106)) as [Last Updated]
from sys.[stats] as s
inner join sys.[tables] as t
on [s].[object_id] = [t].[object_id]
group by t.name
having min(convert(CHAR(11),stats_date(t.object_id,s.[stats_id]),106)) < dateadd(day, -1, getdate())
order by 2 desc发布于 2012-02-17 08:00:01
您可以只在where中使用条件,这将过滤单个记录而不是筛选组,然后可以对结果进行分组,以避免结果中的重复。
在比较日期时,不应该将日期转换为字符串。当您将其转换为字符串时,您应该在得到最低值之后才这样做,否则min会将日期作为字符串进行比较,并给出错误的结果。
select
t.name as [Table Name],
convert(CHAR(11),min(stats_date(t.object_id,s.[stats_id])),106) as [Last Updated]
from
sys.[stats] as s
inner join sys.[tables] as t on s.[object_id] = t.[object_id]
where
stats_date(t.object_id,s.[stats_id]) < dateadd(day, -1, getdate())
group by
t.name
order by
2 deschttps://codereview.stackexchange.com/questions/9067
复制相似问题