【问题标题】:selecting latest row of transaction table if row contains some values in MySql如果行包含 MySql 中的某些值,则选择事务表的最新行
【发布时间】:2016-06-20 14:50:15
【问题描述】:
这是我的两张表,`Leadid` 是主键。


表 1 -(主)

    Leadid 客户名称
    101 拉梅什·库马尔
    102 拉詹·库马尔
    103 拉胡尔·库马尔

表 2 - (交易)

    id Leadid Followed_by
    1 101 萨奇
    2 101 马杜里
    3 101 萨奇
    4 102 萨奇
    5 102 马杜里
    6 103 萨奇
    7 103 萨奇

问题:我需要来自 `Table1` 和 `Table2` 的所有记录,其中 MAHURI 有
关注 Leadid 的最新消息。 (如下)

`102 拉詹库马尔 5 102 马杜里`


在 SAKSHI 的情况下,它应该是:

101 拉梅什库马尔 3 101 萨克希
103 拉胡尔库马尔 7 103 萨克希

如果其他人遵循相同的潜在客户 ID,则不应包括以前的交易...

i e Leadid 101 紧随其后的是 madhuri,但紧随其后的是 SAKSHI。

因此在查询 MADHURI 时不应显示它。

【问题讨论】:

  • 我可以对 SAKSHI 使用相同的查询来获得结果吗:101 Ramesh Kumar 3 101 SAKSHI 103 Rahul Kumar 7 103 SAKSHI
  • 相应地编辑您的问题

标签: php mysql sql-server join


【解决方案1】:
// SAME CODE WHILE SELECT FOR SAKSHI


SELECT s.*,t.* FROM master s
INNER JOIN Transaction t
ON(t.leadid = s.leadid)
WHERE NOT EXISTS(SELECT 1 FROM Transaction tt
             WHERE t.leadid = tt.leadid
               AND t.id < tt.id)
 AND t.followed_by = 'SAKSHI'



// SAME CODE WHILE SELECT FOR MADHURI


SELECT s.*,t.* FROM master s
INNER JOIN Transaction t
ON(t.leadid = s.leadid)
WHERE NOT EXISTS(SELECT 1 FROM Transaction tt
             WHERE t.leadid = tt.leadid
               AND t.id < tt.id)
 AND t.followed_by = 'MADHURI'

http://sqlfiddle.com/#!9/a4fbb/39/0

http://sqlfiddle.com/#!9/a4fbb/38/0

【讨论】:

    【解决方案2】:

    此查询仅用于获取“MADHURI”的最新值

    SELECT a.*,b.* FROM `Master` AS a INNER JOIN `Transaction` AS b ON a.Leadid = b.Leadid WHERE Followed_by = "MADHURI" ORDER BY b.id DESC LIMIT 1; 
    

    要用于所有交易,请使用查询

    SELECT a.*,b.* FROM `Master` AS a INNER JOIN `Transaction` AS b ON a.Leadid = b.Leadid WHERE b.id = 'userid' ORDER BY b.id DESC LIMIT 1;  
    

    根据不同的用户改变userid..

    【讨论】:

    • 第一部分是正确的。但第二部分很差。
    • 谢谢!但在 SAKSHI 的情况下,它只显示一条记录 103,它应该显示 101 也因为 101 最后是 SAKSHI。请检查并帮助:
    • 结果是真的..因为后面跟着 'sakshi' 的最新的是 'rahulkumar'
    • SAKSHI 关注了两条线索(最新):101 和 103
    • 在您的第二个表中存在数据复制。这违反了关系数据库的概念。在开始您的项目之前,请确保您的表已标准化。
    【解决方案3】:
    Select Master.*, Transaction.* from Master left join Transaction on Transaction.Leadid = Master.Leadid where Followed_by = "MADHURI" order by Transaction.Leadid desc limit 1
    

    【讨论】:

    • 我可以对 SAKSHI 使用相同的查询来获得结果吗:101 Ramesh Kumar 3 101 SAKSHI 103 Rahul Kumar 7 103 SAKSHI
    • 谢谢!但在 SAKSHI 的情况下,它只显示一条记录 103,它应该显示 101 也因为 101 最后是 SAKSHI。请检查并帮助:
    • 你应该正确提出问题。
    【解决方案4】:

    selectleadid,customername,id,leadid,followedby from master a , transaction b where a.leadid= b.leadid and followby = 'MADHURI' order by leadid desc

    【讨论】:

    • 我可以对 SAKSHI 使用相同的查询来获得结果吗:101 Ramesh Kumar 3 101 SAKSHI 103 Rahul Kumar 7 103 SAKSHI
    • @ranjan Kumar -- 是的,你可以!!
    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2011-09-12
    • 2016-11-06
    • 1970-01-01
    • 2022-08-14
    相关资源
    最近更新 更多