从列而不是主键中选择最大值的正确方法是啥

Posted

技术标签:

【中文标题】从列而不是主键中选择最大值的正确方法是啥【英文标题】:what is the correct way to select the highest value from column not primary key从列而不是主键中选择最大值的正确方法是什么 【发布时间】:2021-05-02 17:30:45 【问题描述】:

我有一个表(报告)由几条记录组成,其中一条关于 int 值(列)我试图获取 fall_value 列的最大编号,唯一的主键,表如下:

id (P) fall_value date
3 1.2 2021-01-29
4 1.5 2021-01-30
5 1.6 2021-01-30
6 1 2021-01-31
7 5 2021-01-31
8 1.5 2021-01-31
9 1.5 2021-01-31
10 14 2021-01-31
11 15 2021-01-31

预期结果:15

我尝试了以下查询:

SELECT max(fall_value) from report;

我得到了一个意想不到的结果:5

我还收到一条消息说:

当前选择不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用

【问题讨论】:

如果id是主键,为什么值会重复?不允许重复。 id 只是主键,其余不是。因此可以复制其余列值。 您有 2 个 10 的 id 是其中 1 个拼写错误? 抱歉我错了 是您收到的消息,请参阅***.com/q/18922503/17389 【参考方案1】:

听起来fall_value是个字符串,不是数字,而且字符串“5”确实大于字符串“15”。

尝试转换为数字。一种方便的方法是使用隐式转换:

SELECT max(fall_value + 0) 
FROM report;

【讨论】:

以上是关于从列而不是主键中选择最大值的正确方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

Toad for Oracle - 从列选项卡中复制列而不包含所有详细信息

从列中的字符串中提取每行的最大值

通过最大化代码重用来为 Android 和 J2ME 编写应用程序的正确设计方法是啥?

如何确定列是不是在其表的主键中? (SQL 服务器)

在NN训练期间最大化一种损失并最小化另一种损失的正确方法是啥?

T-SQL 过于昂贵的查询,在 where/have 条件和复合主键中选择