如何使用现有查询获取此附加数据

时间:2014-04-08 15:50:37

标签: mysql

目前,我正在使用此查询来获取我需要且正确的一些信息

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表?

1 个答案:

答案 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类型,因此,除非您实际拥有时间/日期/时间戳字段,否则您可能无法检查某些内容是否在某个范围内。