【问题标题】:mysql selecting last duplicate record with primary keymysql用主键选择最后一个重复记录
【发布时间】:2013-12-17 14:23:01
【问题描述】:

我正在尝试创建一个查询语句,它通过列 (PhoneNumber) 将 MasterQuery 表连接起来,并且仅检索重复的最后一条记录(如果存在)

大师

id      PhoneNumber     Flag    Date    
10009   425729233   N   2013-11-01
10011   425728397   N   2013-11-01
10012   425726253   Y   2013-11-01
10014   425726253   Y   2013-11-01

查询

PhoneNo
425729233
425728397
425726253
433699225

预期结果:

id      PhoneNumber     Flag    Date
10009   425729233   N   2013-11-01
10011   425728397   N   2013-11-01
10014   425726253   Y   2013-11-01

尝试过的查询

Select id, PhoneNumber, Flag, Date from Master,Query where Master.PhoneNumber = Query.PhoneNo group by phoneNumber having max(id)

Select id,PhoneNumber, Flag, Date from Master, Query where Master.PhoneNumber = Query.PhoneNo and id in (select max(id) from Master)

任何有关如何处理查询表中跳过的值433699225 的帮助都会有所帮助。基本上,查询表是从 csv 导入的,它与主表进行比较,包括匹配和不匹配的最终输出需要导出到 csv 中。

【问题讨论】:

  • 选择MAX(id)
  • @zerkms 你的答案只有在最大的 id 总是对应于最近的日期时才有效。
  • @portforwardpodcast 你说得有道理。但是,这恰好是 OP 在尝试查询部分中所做的。所以似乎是一个公平的解决方案
  • @portforwardpodcast:如果 OP 使用了MAX(id) - 这意味着它是交易。所以我的评论基于当前的查询。 PS:哎呀,Mosty Mostacho 已经提到过同样的事情
  • MySQL 标签下最常见问题的副本

标签: php mysql csv greatest-n-per-group


【解决方案1】:

是这个团队成功了,

并且 Right Join 用于从 table2 中获取剩余的不匹配值。语法在哪里 对了

select Master.id, query.PhoneNo, Master.Flag, Master.Date from (select Master.id, Master.PhoneNumber, Master.Flag, Master.Date from Master where Master.id in (select max(id) from Master group by PhoneNumber)) Master right join query on Master.PhoneNumber = Query.PhoneNo

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多