目前,我正在使用这个查询来获取一些我需要并且是正确的信息。
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)。那么,我如何添加一个条件语句,以便只生成update_detail表中特定“时间”范围之间存在的结果?
发布于 2014-04-08 16:11:16
您所拥有的“时间”格式不正确(2013-2-2011年无效)。但是,给定有效的时间戳值,可以使用以下内容:
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类型,因此除非您实际上有一个时间/日期/时间戳字段,否则很可能无法检查某个内容是否在某个范围内。
https://stackoverflow.com/questions/22942007
复制相似问题