patternsqlMajor
Does SQL Server support GREATEST and LEAST, if not what is the common workaround?
Viewed 0 times
workaroundthewhatgreatestsqlanddoesleastservernot
Problem
Reviewing this question it seems like that's a lot of work that shouldn't be needed. They're trying to extend a range with a date. In other databases, you would just use
When I try to use these though, I get
That would cover extension in either direction.
For the purposes of the question, you would still have to do exclusive range replacement.
I'm just wondering how SQL Server users implement query patterns to mimic
Do you unroll the conditions into
greatest and least..least(extendDate,min), greatest(extendDate,max)When I try to use these though, I get
'least' is not a recognized built-in function name.
'greatest' is not a recognized built-in function name.That would cover extension in either direction.
For the purposes of the question, you would still have to do exclusive range replacement.
I'm just wondering how SQL Server users implement query patterns to mimic
least and greatest functionality. - PostgreSQL
GREATEST/LEAST
- MySQL
GREATEST/LEAST
- MariaDB
GREATESTLEAST
- DB2
GREATESTLEAST
- Oracle
GREATESTLEAST
Do you unroll the conditions into
CASE statements or is there an extension, third party add-on, or license from Microsoft that enables this functionality?Solution
One common method is to use the
There are other ways of writing it, for example using
However, the resulting query plans seem to be the same.
SQL Server now supports both of these functions in Azure SQL DB, and presumably they will be available on prem for SQL Server 2022.
VALUES clause, and CROSS APPLY the two columns aliased as a single column, then get the MIN and MAX of each.SELECT MIN(x.CombinedDate) AS least, MAX(x.CombinedDate) AS greatest
FROM dbo.Users AS u
CROSS APPLY ( VALUES ( u.CreationDate ), ( u.LastAccessDate )) AS x ( CombinedDate );There are other ways of writing it, for example using
UNION ALLSELECT MIN(x.CombinedDate) AS least, MAX(x.CombinedDate) AS greatest
FROM dbo.Users AS u
CROSS APPLY ( SELECT u.CreationDate UNION ALL SELECT u.LastAccessDate ) AS x(CombinedDate);However, the resulting query plans seem to be the same.
SQL Server now supports both of these functions in Azure SQL DB, and presumably they will be available on prem for SQL Server 2022.
Code Snippets
SELECT MIN(x.CombinedDate) AS least, MAX(x.CombinedDate) AS greatest
FROM dbo.Users AS u
CROSS APPLY ( VALUES ( u.CreationDate ), ( u.LastAccessDate )) AS x ( CombinedDate );SELECT MIN(x.CombinedDate) AS least, MAX(x.CombinedDate) AS greatest
FROM dbo.Users AS u
CROSS APPLY ( SELECT u.CreationDate UNION ALL SELECT u.LastAccessDate ) AS x(CombinedDate);Context
StackExchange Database Administrators Q#187090, answer score: 39
Revisions (0)
No revisions yet.