0

次の初期データがあります。 ここに画像の説明を入力

私が一緒に来たいのは:

ここに画像の説明を入力

ロジックは次のとおりです。特定の「accNumber」の「Rest」値ごとに、その特定の「Rest」値の最小日付を「date_in」に入れ、「date_fin」には「date」-1 を入れたい同じ「accNumber」の「Rest」属性の次の「日付」の値。'Rest' 値が 0 の行を選択するべきではありません。もう 1 つの問題は、特定の accNumber の最後の 'Rest' 値に関するものです。同じ 'accNumber' を持つ次の日付はありません。そのため、日付の最後の値を date_fin として単純に取得する必要があります (提供されたテーブルでこれを確認できます。ここに基本的な作業があります)。私はやったが、それは私が望むように動作しません:

SELECT a.accNumber, a.Rest, MIN(a.Date), MIN(b.Date)
FROM Table1 a
LEFT JOIN Table1 b ON a.accNumber=b.accNumber 
WHERE a.Date<b.Date 
AND a.Rest<>0 
AND a.accNumber=b.accNumber
GROUP BY a.accNumber, a.Rest
ORDER BY a.accNumber

助けてください。前もって感謝します

4

2 に答える 2

0

私があなたの問題を理解している限り、開始日と終了日を accnumber と rest でグループ化して、rest <> 0 にする必要があります

   SELECT A.ACCNUMBER, A.REST, MIN(DATE) AS 'DATE_IN',(SELECT 
    MAX(B.DATE) FROM TABLE1 B 
    WHERE 
    A.DATE<B.DATE AND
    A.REST <> 0 AND
    A.ACCNUMBER = B.ACCNUMBER) AS 'DATE_FIN'
    FROM TABLE1 A
    GROUP BY ACCNUMBER, REST
    ORDER BY ACCNUMBER
于 2013-11-11T12:48:11.867 に答える
0

さて、あなたの問題を理解したので、動作するはずの小さな例を作成しました。エディターでコードをフォーマットできませんでした。申し訳ありません

select 
    accNumber,rest, min(Date) date_in, Max(Date) date_fin, 
ROW_NUMBER() OVER(PARTITION BY accNumber ORDER BY MIN(date)) AS Row
INTO #tmp
from table1
GRoup By accNumber,rest
order by accNumber,date_in
select a.accNumber,a.rest, a.date_in, ISNULL(DATEADD(dd,-1,b.date_in),a.date_fin)date_fin
from #tmp a
LEFT JOIN #tmp b ON a.accNumber=b.accNumber and a.Row = b.Row - 1 
where a.rest != 0
order by a.accNumber,a.date_in
drop table #tmp
于 2013-11-11T12:22:58.700 に答える