1

特定のソフトウェア バージョンの開始日と終了日を取得する必要があります。テーブルには次のデータがあります。

Row ID  Node_ID  logtime                          Version  
201191  121212   11-OCT-11 12.13.48.495000000 AM  v2.0.26496.311    
470128  121212   08-DEC-11 10.45.04.696000000 AM  v2.0.26496.312  
495049  121212   23-JAN-12 06.06.09.226000000 PM  v2.0.26496.313  
630076  121212   30-APR-12 03.21.12.296000000 PM  v2.1.2344.31  
643917  121212   31-MAY-12 10.59.32.655000000 AM  v2.1.2514.31  

期待される出力:

Node_ID Version         logtime_start                   logtime_end  
121212  v2.0.26496.311  11-OCT-11 12.13.48.495000000 AM 08-DEC-11 10.45.04.696000000 AM
121212  v2.0.26496.312  08-DEC-11 10.45.04.696000000 AM 23-JAN-12 06.06.09.226000000 PM
121212  v2.0.26496.313  23-JAN-12 06.06.09.226000000 PM 30-APR-12 03.21.12.296000000 PM
121212  v2.1.2344.31    30-APR-12 03.21.12.296000000 PM 31-MAY-12 10.59.32.655000000 AM
121212  v2.1.2514.31    31-MAY-12 10.59.32.655000000 AM today's date

ご覧のとおり、v2.0.26496.311 は行 1 と行 2 のログ時刻を使用して、この特定のバージョンが使用された日付範囲を示しています。

使用すべきアイデアや方向性はありますか?

4

2 に答える 2

0

In SQL Server 2008+ you can do something like the following:

        -- Some test data
        declare @V table(ID int identity, Node_ID int, logtime datetime, Version varchar(50));
        insert @V values(121212, '2011-OCT-11 12:13:48', 'v2.0.26496.311');
        insert @V values(121212, '08-DEC-11 10:45:04', 'v2.0.26496.312');
        insert @V values(121212, '23-JAN-12 18:06:09', 'v2.0.26496.313');
        insert @V values(121212, '30-APR-12 03:21:12', 'v2.1.2344.31');
        insert @V values(121212, '31-MAY-12 10:59:32', 'v2.1.2514.31');

        -- a temporary named result set, known as a common table expression
        with CTE (ROWID, Node_ID, [Version], logtime)
        as
        (
            select ROW_NUMBER() OVER (Order by ID), Node_ID, Version, logtime 
            from @V
        )

        select 
            a.Node_ID, 
            a.Version,
            Start = min(a.logtime),
            [End] = min(b.logtime)
        from CTE a
            left join CTE b on b.ROWID = a.ROWID + 1
        group by a.Node_ID, a.Version
        order by a.Node_ID, a.Version, min(a.logtime) desc
于 2012-09-05T20:22:09.350 に答える
0

node_id、
version、
logtime を logtime_start として選択し、
nvl(LEAD(logtime, 1) OVER (ORDER BY node_id, logtime), systimestamp) を audit_values から logtime_end として選択します。

于 2012-09-06T19:31:33.673 に答える