代码之家  ›  专栏  ›  技术社区  ›  Baahubali

基于SQL中的最大日期查找结果

  •  -1
  • Baahubali  · 技术社区  · 6 年前

    我试图得到结果的最大日期,在现有的表结构,有日期分裂成三列(日,月和年)。我正在寻找解决这个问题的最佳方法,因为底部的sql可以工作,但我不确定是否应该编写这样的语句?

    Table Structure "blah"
    
        ID GUID,
        Description varchar(max),
        Column - Day (Stores Day of the Month),
        Column - Month (Stores Month of the Year),
        Column - Year (Stores Year)
    
        SELECT Count(ID), Description, MAX(CONVERT(DATE,CAST([Year] AS VARCHAR(4))+'-'+
                            CAST([Month] AS VARCHAR(2))+'-'+
                            CAST([Day] AS VARCHAR(2))))
        From blah
        Group by Description
    

    然而,上面的语句也带来了一些不是max的记录。 现在我有另一种方法来做这件事,但我不确定这是否是最好的方法:

    SELECT Count(ID), Description, CONVERT(DATE,CAST([Year] AS VARCHAR(4))+'-'+
                        CAST([Month] AS VARCHAR(2))+'-'+
                        CAST([Day] AS VARCHAR(2))) As [Date]
    From blah
    Group by Description
    Having CONVERT(DATE,CAST([Year] AS VARCHAR(4))+'-'+
                        CAST([Month] AS VARCHAR(2))+'-'+
                        CAST([Day] AS VARCHAR(2))) = (SELECT MAX(CONVERT(DATE,CAST([Year] AS VARCHAR(4))+'-'+
                        CAST([Month] AS VARCHAR(2))+'-'+
                        CAST([Day] AS VARCHAR(2)))) From blah)
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   san    6 年前

    不确定我是否很清楚地理解这个问题,因为你的解释和你尝试的代码说了不同的东西

    如果您只查找一行,这是排在最大日期的行,那么您可以这样写:

    SELECT   * 
    FROM     blah
    WHERE    DATEFROMPARTS (Year, Month, Day) = (SELECT MAX(DATEFROMPARTS (Year, Month, Day)) FROM blah);
    

    如果每个描述都需要相同的内容,则:

    ;WITH CTE AS 
    (
        SELECT   Description, MaxDate = MAX(DATEFROMPARTS (Year, Month, Day))
        FROM     blah
        GROUP    BY Description
    )
    SELECT  *
    FROM    blah B
            INNER JOIN CTE 
               ON B.Description = CTE.Description 
               AND DATEFROMPARTS (B.Year, B.Month, B.Day) = CTE.MaxDate;