Définir la solution pour mettre à jour NULLS à la dernière valeur connue dans le tableau ordonné

StackOverflow https://stackoverflow.com/questions/4922856

  •  30-10-2019
  •  | 
  •  

Question

Pour maintenir ma pureté et mon honneur en tant que Database Dork, je souhaite mettre à jour un ensemble de temps et de flotteurs qui a des nuls dans la colonne flottante de sorte que chaque valeur nulle sera remplacée par la valeur non nulle (par datetime) précédente.

Mon environnement est MSSQL 2K8R2.

J'espère que l'extrait suivant explique suffisamment mes conditions de victoire.

Bravo et merci.

create table #datesAndValues(
    [Date] datetime,
    Val float);
create table #resultsShouldLookLikeThis(
    [Date] datetime,
    Val float);

insert into #datesAndValues 
values  
    ('1/8/11',1.1),
    ('1/7/11',null),
    ('1/6/11',1.2),
    ('1/5/11',null),
    ('1/4/11',null),
    ('1/3/11',1.3),
    ('1/2/11',null),
    ('1/1/11',null);

/*  
    set based code (no loops!!!) goes here to set nulls
    in the above table to the last known good (not null) value,
    thereby making it look like the following table.
*/

insert into #resultsShouldLookLikeThis
values  
    ('1/8/11',1.1),
    ('1/7/11',1.2),
    ('1/6/11',1.2),
    ('1/5/11',1.3),
    ('1/4/11',1.3),
    ('1/3/11',1.3),
    ('1/2/11',null),
    ('1/1/11',null);

--this will tell us if it worked
select 'In old but not new' as [WhichTable], o.*
from    (select * from #datesAndValues
        except select * from #resultsShouldLookLikeThis) o
union all
select 'In new but not old' as [WhichTable], n.*
from    (select * from #resultsShouldLookLikeThis
        except select * from #datesAndValues) n;

drop table #datesAndValues;
drop table #resultsShouldLookLikeThis;

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top