0

Microsoft SQL Server 2008を使用して、データポイントの時系列順を特定し、各ID番号の最初と最後のレコードのみを含むクエリを作成できるフィルターフィールドを作成します。複数の行は異なるデータを表します。同じIDからのポイント

これが私の現在のデータと私が何を意味するのかをよりよく理解するために必要なデータの例です:

現在のデータ

ID    Indicator        Date
1       1           1988-02-11
1       1           1989-03-9
1       1           1993-04-3
1       1           2001-05-4
2       1           2000-01-01
2       1           2001-02-03
2       1           2002-04-22
3       1           1990-02-01
3       1           1998-02-01  
3       1           1999-03-02
3       1           2000-04-02
4       0               NA

必要なデータ

ID    Indicator    Date        Order_Indicator
1       1       1988-02-11        1
1       1       1989-03-9         2
1       1       1993-04-3         3
1       1       2001-05-4         4
2       1       2000-01-01        1
2       1       2001-02-03        2
2       1       2002-04-22        3
3       1       1990-02-01        1
3       1       1998-02-01        2
3       1       1999-03-02        3
3       1       2000-04-02        4
4       0       NULL             NULL

作成するフィールドは、「DesiredData」テーブルの「Order_Indicator」フィールドであり、関連するレコードは、Indicator = 1のレコードのみです。この情報を使用して、Order_Indicator=1の行のみを選択するクエリを作成します。同じIDを共有する各「行グループ」のOrder_Indicator=MAX(Order_Indicator)。誰かが私がこれについてどうやって行くのかについて何か考えがありますか?これはExcelで非常に簡単に実行できることはわかっていますが、同僚と再現できるようにするには、SQLサーバーで実行する必要があります。

よろしくお願いします!

4

2 に答える 2

1

これは、ランキング機能を使用して行うことができます。

select c.*,
       (case when indicator = 1
             then row_number() over (partition by id, indicator order by [date])
        end) as OrderIndicator
from current c

これにより、日付とインジケーターに基づいて連番が割り当てられます。caseステートメントは、インジケーター=0の場合を処理します。

ちなみに、これは「日付」が日付として保存されていることを前提としています。

于 2012-08-27T21:48:01.733 に答える
0

以下のクエリを使用してください:

select YourTable.ID,
       YourTable.indicator,
       case when date<>'NA' then date end as date,
       case when indicator = 1 then row_number() over (partition by id, indicator order by ID) end as Order_Indicator
from YourTable
于 2012-08-28T08:48:16.743 に答える