1

I と SQL Server でのビューの作成

以下は私の結果です。これに基づいて、2番目の表に示す結果を実際に達成する必要があります

PersonID      MonthYear     DateTimevalue
----------    ----------    --------------
 1             201101        NULL
 1             201102        NULL
 1             201103        2011-03-10 09:35:57.387
 1             201104        2011-04-26 13:25:00.050
 1             201105        NULL
 1             201106        NULL
 1             201107        2011-07-30 16:49:26.050
 1             201108        NULL
 1             201109        2011-09-21 13:33:42.273
 1             201110        2011-10-20 08:55:59.873
 1             201111        NULL
 1             201112        NULL

そのため、DateTimeValue が NULL の場合、前月の値を取得する必要があります

下表の通り

PersonID      MonthYear     DateTimevalue
----------    ----------    --------------
 1             201101        NULL
 1             201102        NULL
 1             201103        2011-03-10 09:35:57.387
 1             201104        2011-04-26 13:25:00.050
 1             201105        2011-04-26 13:25:00.050
 1             201106        2011-04-26 13:25:00.050
 1             201107        2011-07-30 16:49:26.050
 1             201108        2011-07-30 16:49:26.050
 1             201109        2011-09-21 13:33:42.273
 1             201110        2011-10-20 08:55:59.873
 1             201111        2011-10-20 08:55:59.873
 1             201112        2011-10-20 08:55:59.873

どんな助けでも素晴らしいでしょう!!!!

ありがとう !!!!

ありがとう !!!

4

3 に答える 3

2

次のことを試してください。

SELECT  A.PersonID, 
        A.MonthYear, 
        ISNULL(A.DateTimeValue,B.DateTimeValue) DateTimeValue
FROM YourTable A
OUTER APPLY (   SELECT TOP 1 DateTimeValue 
                FROM YourTable
                WHERE PersonID = A.PersonID 
                AND MonthYear < A.MonthYear 
                AND DateTimeValue IS NOT NULL
                ORDER BY MonthYear DESC) B
于 2013-01-24T20:21:14.277 に答える
0

これを試して:

select t1.personid
  , t1.monthyear
  , datetimevalue = prev.datetimevalue
from t1
  outer apply
  (
    select top 1 datetimevalue
      , personid
      , monthyear
    from t1 prev
    where prev.monthyear <= t1.monthyear
      and prev.datetimevalue is not null
    order by monthyear desc
) prev
order by t1.personid
  , t1.monthyear

SQLFiddle デモ.

cross applyouter applyに変更するように編集された @Lamak は、それを正しく行いました。

于 2013-01-24T20:20:15.683 に答える
0

Sql Server では、Select 句でネストされた SQL を使用できますか? そうであれば:

select personId, monthYear, 
       (select T2.DateTimeValue from Tbl T2 
        where T2.monthYear=(select max(T3.monthYear) from Tbl T3
                            where T3.personid=T1.personId and T3.monthYear<=T1.monthYear
                              and T3.DateTimeValue is not null
                           )
       )
from Tbl T1

すなわち

  1. 月ごとに、この月よりも小さい月を見つけますが、DateTime は null ではありません。
  2. 上記の手順で見つかった月の DateTime 値を検索します。
于 2013-01-24T20:10:51.670 に答える