FIRST_VALUE(B.LOC_X) OVER (PARTITION BY A.ACTIONBLOCKID ORDER BY CASE WHEN B.EVENT_TIMESTAMP <= A.ACTIONBLOCKENDTSTAMP THEN B.EVENT_TIMESTAMP END DESC NULLS LAST) AS DROPOFF_SCANLOC_X
I have this particular statement written in DB2 and since, NULLS LAST
does not work in T-SQL. I am looking for a way to do the same thing in T-SQL.
CodePudding user response:
The alternative, as I mention, would be to use ISNULL
to provide an arbitrarily high value so that NULL
values are last. As, however, you are using a CASE
expression here, then the arbitrarily high value would be in the ELSE
clause:
FIRST_VALUE(B.LOC_X) OVER (PARTITION BY A.ACTIONBLOCKID
ORDER BY CASE WHEN B.EVENT_TIMESTAMP <= A.ACTIONBLOCKENDTSTAMP THEN B.EVENT_TIMESTAMP
ELSE 1000
END DESC) AS DROPOFF_SCANLOC_X
I use your suggestion of 1000
here, however, considering the column is called EVENT_TIMESTAMP
I suspect that this is going to give you an error, or not the date you want (1000
as a datetime
is 1902-09-28 00:00:00.000
, which really isn't a "high value" date). More likely you want an arbitrarily date well into the future (like '99991231'
).