【问题标题】:select latest record from MySql view [duplicate]从MySql视图中选择最新记录[重复]
【发布时间】:2017-06-12 06:59:36
【问题描述】:

我有一个sql view,看起来像下面的数据

leadId  status  statusTime
--------------------------
1361    new     2017-06-12 11:57:33
1358    new     2017-06-12 11:20:46
1358    warm    2017-06-12 11:21:20
1358    closed  2017-06-12 11:56:57

你可以看到leadId 13583 lead status,最后一个是latest。所以我想要下表中的记录

leadId  status  statusTime
--------------------------
1361    new     2017-06-12 11:57:33
1358    closed  2017-06-12 11:56:57

我怎样才能做到这一点?谢谢

【问题讨论】:

  • 试试这个:select max(lead_id),status statusTime from table Group by lead_id,status statusTime
  • max(lead_id) 可能不正确 @MuhammadMuazzam 他需要根据 statusTime 检索
  • 是的,您的查询正在提取最旧的记录。但我需要基于 statusTime 的最新记录

标签: mysql


【解决方案1】:
select leadId,status,statusTime 
from your_view
where (leadId,statusTime) 
     IN (select leadId,MAX(statusTime) as maxStatusTime
         from your_view
         GROUP BY leadId) 

首先找到最新statusTime的条目,然后使用它来获取详细信息

【讨论】:

    【解决方案2】:

    在 MySQL 中处理此问题的一种规范方法是将您的视图加入到子查询中,该子查询标识每个 leadId 的最近状态时间。此连接过滤掉除最近记录之外的所有记录。

    SELECT v1.*
    FROM yourView v1
    INNER JOIN
    (
        SELECT leadId, MAX(statusTime) AS max_status_time
        FROM yourView
        GROUP BY leadId
    ) v2
        ON v1.leadId     = v2.leadId AND
           v1.statusTime = v2.max_status_time
    

    对此的替代方法是使用相关子查询,但这可能不会像上面给出的那样执行。

    Demo

    【讨论】:

    • 这使得查询很慢。我必须等待 4-5 分钟才能得到结果
    • 我的猜测是缓慢是由于视图,而不是我的查询策略,这可能是这里应该使用的。您可以尝试直接在表而不是视图上运行查询。另外,您的视图/表有多少条记录?
    • 表中有很多数据(大约 3000 条数据),我无法在表上运行查询,我必须在视图上运行,因为那里收集了另外 2 个表中的许多数据。
    • 没有看到所有进入视图的查询,恐怕我无法进一步评论。我建议向生成视图的查询添加适当的索引。这应该有望加快我给你的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多