目前,我正在使用此查询来获取我需要且正确的一些信息
SELECT DISTINCT
a.AS_No SOURCE, b.AS_No TARGET
FROM
as_path a,
as_path b
WHERE
a.Update_ID = b.Update_ID
AND a.Path_Index = b.Path_Index - 1
AND a.Update_ID IN (
SELECT Update_ID
FROM (
SELECT *
FROM bgpstorage.announce_update t1
JOIN (
SELECT IP as i, MAX(Update_ID) as maxupdate
FROM bgpstorage.announce_update
GROUP BY IP
) x
ON t1.IP = x.i
AND t1.Update_ID = x.maxupdate
) sub
);
上面的脚本获取数据库中所有as_path的最新状态。
但是现在,我希望在特定时间内获得所有最新信息(例如2013-2-2 - > 2013-2-3)。那么我怎样才能添加条件语句来仅生成特定" Time"之间存在的结果。范围从update_detail表?
答案 0 :(得分:0)
您的“时间”格式不正确(2013-2-2011无效)。但是,给定有效的TIMESTAMP值,您可以使用以下内容:
SELECT
SOURCE, TARGET FROM (
SELECT DISTINCT
a.AS_No SOURCE, b.AS_No TARGET, c.`Time` TRANGE
FROM
as_path a,
as_path b,
update_detail c
WHERE
a.Update_ID = b.Update_ID
AND a.Path_Index = b.Path_Index - 1
AND a.Update_ID IN (
SELECT Update_ID
FROM (
SELECT *
FROM bgpstorage.announce_update t1
JOIN (
SELECT IP as i, MAX(Update_ID) as maxupdate
FROM bgpstorage.announce_update
GROUP BY IP
) x
ON t1.IP = x.i
AND t1.Update_ID = x.maxupdate
) sub
)
)
WHERE `TRANGE` BETWEEN '2013-02-01 00:00:00' AND '2013-02-02 23:59:59';
但是,您的时间字段是VARCHAR类型,因此,除非您实际拥有时间/日期/时间戳字段,否则您可能无法检查某些内容是否在某个范围内。