Mysql查询使用日期获取最新数据

标签 mysql sql date aggregate-functions

enter image description here

这是我的 table 。现在我必须找出每个 user_id 的最新 company_name。事实是,如果 exp_to 为 null 那么它将被认为是最新的,或者如果 exp_from 和 exp_to 都不为 null 那么我必须使用 exp_to date 找到最新的公司名称。请注意,user_id 在给定表中多次出现。

这是我想要的:

id | company_name 
-----------------
14 | Deltalife Insurance Company Ltd.
1  | Orbital Software
25 | MMTV    
18 | Noakhali Science & Technology University

等等…… 我怎样才能用mysql做到这一点?提前致谢。

最佳答案

这是一个非常简单的聚合问题。您可能已经发现,空值会导致 some interesting behavior在 SQL 中。您可以使用 CASE WHEN 检查 null 并替换为不同的值。

在你的情况下:

SELECT 
  data.* 
FROM (
  SELECT 
    *,
    CASE WHEN exp_to is null THEN 1 ELSE exp_to END max_date
  FROM your_table
) data
INNER JOIN (
  SELECT
    user_id,
    CASE WHEN MAX(exp_to is null) = 1 THEN 1 ELSE MAX(exp_to) END max_date
  FROM
    your_table
  GROUP BY user_id
) j
ON data.user_id = j.user_id AND data.max_date = j.max_date

希望这对您有所帮助,祝您好运!

关于Mysql查询使用日期获取最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39426845/

相关文章:

mysql - 如何将 Bootstrap Modal 表单数据传递给 Spring Boot Controller

javascript - 无法解析日期

java - 接受 05/05/1999 和 5/5/1999 等的日期时间解析

mysql 查询连接五个表

mysql - 使用组和最新条目计算平均分数

Mysql (LEFT)JOIN 如何解释这种行为?

javascript - 如何使用 Azure 上的脚本计算表中的元素数量?

SQL变量,怎么做?

mysql - 按各种列(具有各种联接)进行分组,但对不同的其他列进行求和

php - 更改Mysql current_timestamp默认值