【问题标题】:Select first largest value using TOP 1 in MySQL?在 MySQL 中使用 TOP 1 选择第一个最大值?
【发布时间】:2021-05-08 02:27:17
【问题描述】:

我将尝试通过示例来解释我想在 MySQL 中实现什么。

我有一张这样的表:

pricelist_id valid_from
1           1610665200000 //15 Jan 2021
2           1610751600000 //16 Jan 2021         
3           1610838000000 //17 Jan 2021

valid_from 列中的值本质上是通过以下 Java 代码在某个时间点生成的字符串值:

String.valueOf(System.currentTimeMillis())

我的任务是传递任何字符串值(以数字的格式,在本例中为long),以与上述相同的方式生成,我需要提取属于第一个较小的单个pricelist_id或表中valid_from 的相等值,与valid_from 的传递值相比。很难用语言来解释(而且我的英语很糟糕),所以我来演示一下。

如果我传递一个代表Jan 18th1610924400000 的值,我需要获得单个pricelist_id 值,在本例中为3

如果我传递一个代表Jan 16th 17:15:001610813700000 的值,我需要获取单个pricelist_id 值,在本例中为2

如果我传递一个代表Jan 25th1611529200000 的值,我需要获得单个pricelist_id 值,在本例中为3

到目前为止,我所拥有的是:

select  max(p.pricelist_id)
from pricelist p
where  (p.valid_from + 0) <= some_passed_value
order by p.valid_from, p.pricelist_id desc

【问题讨论】:

    标签: mysql sql database groupwise-maximum


    【解决方案1】:

    如果您可以依赖 pricelist_idvalid_from 的排序顺序完全相同,那么您使用 max() 的解决方案可以工作。

    否则你可以使用LIMIT:

    select  p.pricelist_id
    from pricelist p
    where  (p.valid_from + 0) <= some_passed_value
    order by p.valid_from, p.pricelist_id desc
    limit 1
    

    【讨论】:

      【解决方案2】:

      将字符串转换为数字以进行排序和比较 也可以使用limit来获取更高的值

      选择 p.pricelist_id 来自价目表 p 其中 CONVERT(p.valid_from, SIGNED)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-28
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 1970-01-01
        • 2013-03-03
        相关资源
        最近更新 更多