2

誰かがこの混乱した状況で私を助けてくれませんか? SQL Server 2008 で生成されたテーブルがあります。

Number  Date
------  ---------
22619   30/06/11
22617   01/07/11
22556   03/07/11
22556   03/07/11
22560   04/07/11
22560   05/07/11
22560   08/07/11
22561   07/07/11
22561   17/07/11
22564   09/07/11
22564   20/07/11

以下と同じ数字ごとに、前の役割から日数を生成したいと思います。

そして、私は以下を返したい:

Number  Date        Days
------  ----------  ----
22619   30/06/11       0
22617   01/07/11       0
22556   03/07/11       0
22556   03/07/11       0
22560   04/07/11       0
22560   05/07/11       1
22560   08/07/11       3
22561   07/07/11       0
22561   17/07/11      10
22564   09/07/11       0
22564   20/07/11      11

どんな援助も大歓迎です

4

1 に答える 1

0

私はあなたがこれを望んでいると思います:

with data as (
    select number = 22619, date = convert(datetime, '20110630') union all
    select 22617, convert(datetime, '20110701') union all
    select 22556, convert(datetime, '20110703') union all
    select 22556, convert(datetime, '20110703') union all
    select 22560, convert(datetime, '20110704') union all
    select 22560, convert(datetime, '20110705') union all
    select 22560, convert(datetime, '20110708') union all
    select 22561, convert(datetime, '20110707') union all
    select 22561, convert(datetime, '20110717') union all
    select 22564, convert(datetime, '20110709') union all
    select 22564, convert(datetime, '20110720')
)
select next.number, next.date, days = isnull(DATEDIFF(dd, prev.date, next.date),0)
from (
    select *, sequence_no = ROW_NUMBER() OVER(PARTITION BY number ORDER BY date ASC)
    from data
) next
left join (
    select *, sequence_no = ROW_NUMBER() OVER(PARTITION BY number ORDER BY date ASC)
    from data
) prev
on prev.number = next.number
and prev.sequence_no + 1 = next.sequence_no
于 2012-05-02T22:40:22.293 に答える