Hi List,
I've come across a little curiousity and was wondering what was going on
(and if there's an even better way).
I have some DATETIME data:
2013-06-03 16:08:55+01:00
2013-06-03 16:46:22+00:00
2013-06-03 16:48:57+00:00
...
I want to get the the start of the day that was 28 days ago from the
max() value.
I can think of two ways to do this and as best I can tell they both give
the same (correct) result:
--Get the maximum datetime value (the inner "datetime()" is
required so that the max() takes into account the timezones) and then
work out the necessary time/date for 28 days ago for the one result.
select
datetime( max( datetime(my_timedate_column)) , '-28 day' , 'start
of day' )
from my_table
--Convert all datetimes to the date 28 days ago, then get the
maximum from them.
select
max( datetime(my_timedate_column, '-28 day' , 'start of day' ) )
from my_table
As far as I can tell from my non-thorough testing, the first of these is
a smidgen (5-10%) faster than the second although the second is easier
to read. Logically I can see why the second would be slower, but I was
hoping the second would be optimised to the same thing as the first.
Is there a reason for this? And is there a even more efficient way to do
this?
Cheers,
Jonathan