sql - TSQL: how to delete last record from query result if record is NULL -
background: using stored procedure below retrieve hourly time series data.
select * ( select cast(localdatetime smalldatetime) [datetime], datavalue, variableid datavalues siteid = 2 , variableid in(1,3,30) ) tabledate pivot (sum(datavalue) variableid in ([1],[3],[30])) pivottable order [datetime]
usually data written database @ top of hour, , stored procedure executed @ 5 minutes past hour retrieve existing values.
the problem data retrieval on top of hour fails 1 of many sites , no new data written datavalues
table site. however, recent hour still present in datavalues
table because other sites wrote values it. results in query result has record recent hour fields null
. code handles query results can deal hourly data null
whatever reason except in cases last record null
fields.
question: there simple way remove last record of query result (once pivoted per procedure above) if fields of record null
?
you can using row_number()
:
with cte ( select * (select cast(localdatetime smalldatetime) [datetime], datavalue, variableid datavalues siteid = 2 , variableid in(1,3,30) ) tabledate pivot (sum(datavalue) variableid in ([1],[3],[30])) pivottable order [datetime] ) select [datetime], [1], [3], [30] (select cte.*, row_number() on (order [datetime] desc) seqnum cte ) t seqnum = 1 , [1] null , [3] null , [30] null;
however, think easiest way filter before pivot
:
select * (select cast(localdatetime smalldatetime) [datetime], datavalue, variableid datavalues datavalue not null siteid = 2 , variableid in (1, 3, 30) ) tabledate pivot (sum(datavalue) variableid in ([1],[3],[30])) pivottable order [datetime]
this has potential disadvantage of removing other rows null
s in them. if problem, first method works better.
Comments
Post a Comment