What's the difference between these two "qualifiers?"

What's the difference between these two qualifiers:

datediff(d, max(t.created), getDate()) <= 45

and...

max(txn.created) > DATEADD(DAY, -45, GETDATE())

I'm thinking with the first one you have all of the rows where the t.created value falls within a range defined by the difference of today's date and whatever t.created values equals to 45 days or less.

The second clause is all of the rows that have a date that's greater than today's date minus 45 days.

Even when I attempt to explain that, I'm thinking they are fundamentally the same, but am I missing something?
brucegustPHP DeveloperAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Scott PletcherSenior DBACommented:
datediff(d, max(t.created), getDate()) <= 45

= The number of calendar days (not necessarily 24-hour days) between t.created and the current date must be <= 45.


max(txn.created) > DATEADD(DAY, -45, GETDATE())

= The date and time in txn.created must be greater than the date and time 45 days before today.


The time factor is probably the most significant difference between them.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Pawan KumarDatabase ExpertCommented:
Both are same if you consider the logic.

This <<datediff(d, max(t.created), getDate()) <= 45>> is really bad for performance as it will execute this expression for each row in the table and will lead to scanning the entire table even if you have index on the column.

This <<max(txn.created) > DATEADD(DAY, -45, GETDATE()) >> is good, since we are doing maths with the constant value and SQL will calculate the constant separately since it is not dependent on the any table.

Hope it helps !!
0
arnoldCommented:
the material difference is the logical comparison, one deals with integer comparison, the other performs datetime comparison.
The datetime comparison, can be simplified by assigning the date 45 days ago into a variable to avoid running dateadd for every row
Declare @date as datetime
Set @date=dateadd(d,-45,getdate())

Max(txt.created)>@date

Question is the cost of running datediff on every row of a result set less or more than datetime comparison, if not mistaken, the comparison on datetime also scans the entire result set datetime fields are not indexed........
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft SQL Server

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.