2011-12-23 2 views
2

как получить предыдущую запись зависит от 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 и дату. запись previous_sum отображала только первого партнера. вот мой запрос:

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' 
+0

Что это? MySQL или SQL-сервер? – Johan

+0

с использованием SQL-сервера – tyo

+0

является «предыдущим_Sum» общим числом «Periode_Sum», сгруппированным по партнеру, part_no и дате? Возможно, добавьте больше строк данных образца ... – gbn

ответ

1
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 
+0

Спасибо michal. но моя проблема заключается в том, как создать обновление функции с этим условием в previous_sum, которое previous_sum является столбцом таблицы daily_summary. Я попытался объявить новый параметр, но я не могу загрузить функцию. – tyo

+0

@tyo, мне это непонятно. Вы хотите создать функцию, которая возвращает значение 'previous_sum' для определенной строки или хранимой процедуры, которая обновляет значения в столбце' previous_sum' для всех строк? Не могли бы вы показать свою указанную вами функцию и контекст вызова (добавьте свой вопрос). Добавьте ожидаемый результат (как строку). –

+0

yap создать хранимую процедуру, как вы имеете в виду. Я создал запрос, но все значения становятся нулевыми. – tyo

Смежные вопросы