首页 > 解决方案 > Sybase,where 子句中每个接口的最后一个值

问题描述

每 5 分钟将数据写入数据库,我需要获取 的最后一个值t_in_bpst_out_bps对于每个InfName,此查询将每 5 分钟运行一次

我试过 top 4 ,我得到了四个接口(InfName),但不是每个接口的最新值

SELECT TOP 4 TimeStamp, InfName, t_in_bps, t_out_bps
FROM eMetrics
WHERE InfName in ('Gi0/0/2', 'Gi0/0/1', 'Ethernet1/61', 'Ethernet1/17')

我试过了top 4 max(TimeStamp),我只有一个界面。

帮助!

标签: sybase

解决方案


假设TimeStamp4 个感兴趣的记录是相同的(或至少在几秒钟内),并且之前的TimeStamp值是几分钟前的,你可以用一个order by子句来解决:

SELECT TOP 4 TimeStamp, InfName, t_in_bps, t_out_bps
FROM eMetrics
WHERE InfName in ('Gi0/0/2', 'Gi0/0/1', 'Ethernet1/61', 'Ethernet1/17')
order by TimeStamp desc

否则,正常的解决方案是删除top 4并使用相关的子查询,例如:

SELECT e1.TimeStamp, e1.InfName, e1.t_in_bps, e1.t_out_bps
FROM   eMetrics e1
WHERE  e1.InfName in ('Gi0/0/2', 'Gi0/0/1', 'Ethernet1/61', 'Ethernet1/17')
and    e1.TimeStamp = (select max(e2.TimeStamp)
                       from   eMetrics e2
                       where  e2.InfName = e1.InfName)

推荐阅读