【问题标题】:SQL Select Max Date after a UnionSQL 选择联合后的最大日期
【发布时间】:2021-06-01 15:25:27
【问题描述】:

我想从三个联合行记录中选择最上面的日期(基于我的 SQL 查询),但我遇到了这个错误:

选择列表中的列 'tbl1.intDocID' 无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

SELECT TOP 1 
    a.YearX, intClientCode
FROM 
    (SELECT intDocID, MAX(dtY1) AS YearX, 1 AS position 
     FROM [tbl1] WHERE intDocID = '834'
     UNION ALL
     SELECT intDocID, dtY2, 2 FROM [tbl1] 
     WHERE intDocID = '834'
     UNION ALL
     SELECT intDocID, dtY3, 3 FROM [tbl1] 
     WHERE intDocID = '834') a
ORDER BY 
    a.YearX DESC

【问题讨论】:

    标签: sql sql-server select union union-all


    【解决方案1】:

    您需要在您的选择语句中添加 GROUP BY 子句。 GROUP BY 语句需要使用聚合函数(COUNT、MAX、MIN、SUM、AVG)来按一列或多列对结果集进行分组

    SELECT TOP 1 
        a.YearX, intClientCode 
    FROM
        (SELECT intDocID, MAX(dtY1) AS YearX, 1 AS position FROM [tbl1] 
         WHERE intDocID = '834' 
         GROUP BY intDocID
         UNION ALL
         SELECT intDocID, dtY2, 2 FROM [tbl1] 
         WHERE intDocID = '834' 
         UNION ALL
         SELECT intDocID, dtY3, 3 FROM [tbl1] 
         WHERE intDocID = '834') a
    
    ORDER BY a.YearX desc
    

    【讨论】:

    • 谢谢!我真的认为 group by 应该在下面,但你的工作!
    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 2012-09-26
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多