как обновить столбец с предыдущими данными - PullRequest
2 голосов
/ 23 декабря 2011

как получить предыдущую запись зависит от unique_id и даты? я хочу сделать мой стол (dbo: Daily_Summary):

ID    Partner     part_no    Date      Periode_Sum     Previous_Sum
1      aa            12    2011-12-21       40             
2      aa            12    2011-12-22       30              40
3      bb2           13    2011-12-22       20             
4      bb2           13    2011-12-23       30              20
5                          2011-12-24
6                          2011-12-25
7      aa            12    2011-12-26       30              70
8      bb2           13    2011-12-27       40              50
and so on

, который «Previous_Sum» является обновлением функции, а функция обновляет только предыдущую запись Periode_Sum. И группировать по партнеру, part_no и дате

В моем запросе на отображение произошла ошибка. Когда я отображаю предыдущую запись по партнеру, part_no и дате. запись предыдущего_сума отображает только первого партнера. вот мой запрос:

 SELECT ds.partner_id, ds.part_no, ds. periode_in
        , ds.periode_out, ds.periode_date, ds.periode_sum, 
(   
  SELECT F1.periode_sum
  FROM Daily_Summary as F1 where 
  F1.periode_sum =
    ( 
      SELECT  Max(F2.periode_sum) 
      FROM Daily_Summary as F2 where F2.periode_date < ds.periode_date
      and F2.partner_id=ds.partner_id and F2.part_no = ds.part_no
    ) 
) AS Prev_Value
FROM Daily_Summary ds
where stsrc='A'
order by ds.partner_id, ds.periode_date

Я попытался использовать объявление нового параметра, но не работает:

DECLARE @prev_sum INT = 0
DECLARE @dudut INT = 2

SELECT @prev_sum = 
(select sum(periode_sum) 
    from Daily_Summary t1 
    where t1.partner_id = ds.partner_id and t1.part_no = ds.part_no
        and t1.periode_date < ds.periode_date --and t1.id < t.id
) 
FROM Daily_Summary ds
where stsrc='A'
order by ds.partner_id, ds.periode_date 

select partner_id,part_no,model,periode_sum,
case when @prev_sum is null then @dudut else @prev_sum end 
FROM daily_summary
where stsrc='A'

1 Ответ

1 голос
/ 23 декабря 2011
select * into #tab from (
    select 1 as id, 'aa' as partner, 12 as part_no, 
        cast('2011-12-21' as datetime) as date, 40 as periode_sum union all
    select 2, 'aa', 12, '2011-12-22', 30 union all
    select 3, 'bb2', 13, '2011-12-22', 20 union all
    select 4, 'bb2', 13, '2011-12-23', 30 union all
    select 5, null, null, '2011-12-24', null union all
    select 6, null, null, '2011-12-25', null union all
    select 7, 'aa', 12, '2011-12-26', 30 union all
    select 8, 'bb2', 13, '2011-12-27', 40
) t


select *, (select sum(periode_sum) 
    from #tab t1 
    where t1.partner = t.partner and t1.part_no = t.part_no
        and t1.date < t.date and t1.id < t.id
) as previous_sum
from #tab t

Если разрешено более одной строки в день для конкретной пары (partner, part_no), тогда вместо and t1.date < t.date and t1.id < t.id следует использовать and t1.date <= t.date and t1.id < t.id. Вы можете использовать только and t1.id < t.id, если id обеспечивает правильный порядок (по времени) для всех строк.

Результат:

id   partner    part_no    date                       periode_sum     previous_sum
1    aa         12         2011-12-21 00:00:00.000    40              NULL
2    aa         12         2011-12-22 00:00:00.000    30              40
3    bb2        13         2011-12-22 00:00:00.000    20              NULL
4    bb2        13         2011-12-23 00:00:00.000    30              20
5    NULL       NULL       2011-12-24 00:00:00.000    NULL            NULL
6    NULL       NULL       2011-12-25 00:00:00.000    NULL            NULL
7    aa         12         2011-12-26 00:00:00.000    30              70
8    bb2        13         2011-12-27 00:00:00.000    40              50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...