MSSQL基于最新的时间戳选择

时间:2015-01-15 17:28:58

标签: sql-server timestamp

我做了一些研究,但发现的例子似乎不是我需要的。我的表结构是这样的:

Hostname    Filename    Timestamp

Host1       ***.exe     2014-09-09 12:01:45.000
Host1       ***.pdf     2014-08-09 12:01:45.000
Host1       ***.ide     2014-07-09 12:09:44.000
Host1       ***.ide     2014-12-31 12:00:00.000
Host2       ***.exe     2014-09-09 12:01:45.000
Host2       ***.pdf     2014-08-09 12:01:45.000
Host2       ***.ide     2014-07-08 12:09:44.000
Host2       ***.ide     2014-12-29 12:00:00.000

拥有数百台主机,每台主机拥有数十万个文件。我想要得到的是来自每个主机的ONE .IDE文件 - 以最新的时间戳为准。所以在这种情况下,我想回复:

Host2       ***.ide     2014-12-29 12:00:00.000
Host1       ***.ide     2014-12-31 12:00:00.000

我尝试了以下但是它似乎不是我想要的,我不知道为什么,我知道它是错的:

select hostname, filename, max(timestamp) as timestamp from TABLE where
filename like '%.ide%'
group by hostname,filename

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我相信这会奏效:

select t.*
from table t
join (
    -- gets the maximum timestamp per hostname for "ide"
    SELECT max(Timestamp) as maxTime, hostname
    from table
    where filename like '%.ide%'
    group by hostname
) s on t.hostname = s.hostname
    and t.timestamp = s.maxTime
where t.filename like '%.ide%'

基本上它从主表中选择*,其中记录可以在子查询上成功连接,子查询标识" ide"

的每个主机名的最大时间戳