Get the minimum value between several columns

后端 未结 4 569
遇见更好的自我
遇见更好的自我 2020-12-20 19:35

I\'m using SQL Server 2008;

Suppose I have a table \'X\' with columns \'Date1\', \'Date2\', \'Dateblah\', all of type DateTime.

I want to select the min valu

相关标签:
4条回答
  • 2020-12-20 19:48

    based on scalar function (from Tom Hunter):

    SELECT ID, (SELECT MIN([date]) FROM (VALUES(Date1),(Date2),(Dateblah)) x([date])) MinDate
    FROM TableName
    
    0 讨论(0)
  • 2020-12-20 19:53

    Simply lets say the table where your dates are is called sells and it has two date fields Date1 and Date2 from which you want the minimum.

    SELECT ( 
       SELECT MIN([x]) 
       FROM (VALUES(Date1),(Date2)) x([x])
    ) as minimum
    FROM sells
    
    0 讨论(0)
  • 2020-12-20 19:58

    Implementing a scalar function:

    CREATE FUNCTION [dbo].[MIN](@a SQL_VARIANT, @b SQL_VARIANT)
    RETURNS SQL_VARIANT
    AS 
    BEGIN
        RETURN (
            SELECT MIN([x])
            FROM (VALUES(@a),(@b)) x([x])
        )   
    END
    GO
    
    DECLARE @a DATETIME = '12 JUL 2011', @b DATETIME = '20 AUG 2011'
    SELECT [dbo].[MIN](@a, @b)
    
    DECLARE @c INT = 12, @d INT = 32
    SELECT [dbo].[MIN](@c, @d)
    
    0 讨论(0)
  • 2020-12-20 19:59

    There is no built in function to return the min/max of two (or more) columns. You could implement your own scalar function to do this.

    In SQL Server 2005+ you could use UNPIVOT to turn the columns into rows and then use the MIN function:

    CREATE TABLE [X]
    (
        [ID] INT,
        [Date1] DATETIME,
        [Date2] DATETIME,
        [Date3] DATETIME
    )
    
    INSERT  [X]
    VALUES  (0, '09/29/2011', '09/20/2011', '09/01/2011'),
            (1, '01/01/2011', '01/05/2011', '03/03/2010')
    
    
    SELECT [ID], MIN([Date]) AS [MinDate]
    FROM [X]
    UNPIVOT (
        [Date] FOR d IN
            ([Date1]
            ,[Date2]
            ,[Date3])
    ) unpvt
    GROUP BY [ID]
    
    0 讨论(0)
提交回复
热议问题