【问题标题】:how to select a maximum value and other fields如何选择最大值和其他字段
【发布时间】:2014-05-01 05:03:19
【问题描述】:

我只想获取最大日期值(例如,仅 2014 年的结果),但如果我从 group_by 中删除 water_type,则会出现与字段不属于聚合的错误有关。

示例:

这个查询:

SELECT Location_Code, water_type, max(Sampled_Date_Time) as maxdate
FROM [LChem1_Chemistry] lc1
where Location_Code = 'mb340'
and water_type is not null
group by Location_Code, water_type

明白了:

Location_Code   water_type        maxdate
MB340           Group2           2013-09-27 14:00:00
MB340           SubGroup2        2014-03-04 00:00:00

但是我只想要 2014 年的结果(但将 water_type 保留在结果表中。

谢谢

其实这是一个更好的输入数据示例:

Location_Code   water_type  maxdate
MB117          Group2           2/07/2012 12:58
MB331          Group2          28/02/2013 0:00
MB340          Group2          27/09/2013 14:00
MB340          SubGroup2    4/03/2014 0:00
MB117          Group2           3/07/2012 12:58
MB331          Group2           28/05/2013 0:00

我想要结果表中的第 5,7 和 2 行。

【问题讨论】:

    标签: max aggregate


    【解决方案1】:

    如果你尝试这个查询会怎样:

    SELECT Location_Code, water_type, Sampled_Date_Time
    FROM [LChem1_Chemistry] lc1
    WHERE Location_Code = 'mb340'
    AND water_type is not null
    ORDER BY Sampled_Date_Time DESC
    LIMIT 1
    

    【讨论】:

    • 为简单起见,我将其缩小到 1 个位置,但还有更多位置。顺便说一句,SQL Server。限制 1 是否适用于此?
    • 不,它没有。我认为在这种情况下,您应该使用子查询来获取最大日期。例如看看这个topic
    【解决方案2】:

    你只想要一行还是只想要 2014 年的行

    如果只有 2014 年的行,则可以添加 where 子句。

    如果你只想要第一行,那么你可以有一个内部查询来返回你想要的 water_type 并在 outer_query 中使用它来只返回一行

    【讨论】:

    • 我在原始问题中包含了一个更好的示例 - 希望这可以更好地解释我的要求,谢谢!
    猜你喜欢
    • 2018-09-26
    • 2014-09-15
    • 2012-09-16
    • 2020-09-22
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多