mysql – 过滤重复组合多个列

weixin_38101791 2019-09-12 12:39:31
示例表 | name | year | latitude | longitude | |--------------|------|----------|-----------| | Cleveland | 1800 | 10 | 11 | | Cleveland | 1810 | 10 | 11 | | Medina | 1811 | 12 | 13 | | Dayton | 1812 | 14 | 15 | | Sandusky | 1105 | 50 | 50 | | Mount Vernon | 1813 | 50 | 50 | 我的目标是什么 我想选择纬度和经度的每个独特组合.所以我想过滤掉任何重复的对.我还需要过滤掉年份小于1500的任何记录. 这是我想要实现的子集: | name | year | latitude | longitude | |--------------|------|----------|-----------| | Cleveland | 1800 | 10 | 11 | | Medina | 1811 | 12 | 13 | | Dayton | 1812 | 14 | 15 | | Mount Vernon | 1813 | 50 | 50 | 每个记录年份大于1500,并且没有任何重复的纬度,长对. 我试过的 我试图找到一种方法来使用DISTINCT.我发现的任何东西都没有用. 我也尝试过使用GROUP BY: SELECT * FROM users GROUP BY latitude, longitude HAVING year > 1500; 上述查询的问题是消除了包含lat,long对50,50的以下两个记录: | name | year | latitude | longitude | |--------------|------|----------|-----------| | Sandusky | 1105 | 50 | 50 | | Mount Vernon | 1813 | 50 | 50 | 由于桑达斯基的年份不到1500年,该团体被淘汰了.我不想要桑达斯基的记录,但我确实想要弗农山. 我注意到,如果这两个记录切换如此: | name | year | latitude | longitude | |--------------|------|----------|-----------| | Mount Vernon | 1813 | 50 | 50 | | Sandusky | 1105 | 50 | 50 | ……然后该组织的年份设定为1813年,该组织未被淘汰.我想也许按年分类会解决它,但它没有: SELECT * FROM users GROUP BY latitude, longitude HAVING year > 1500 ORDER BY year DESC; 我正在尝试的是什么?
...全文
29 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38104149 2019-09-12
  • 打赏
  • 举报
回复
这个怎么样? SELECT `id`, `name`, MAX(users.year) as `year`, latitude, longitude FROM users WHERE year > 1500 GROUP BY latitude, longitude; 结果是: | 7 | Columbus | 1978 | 7 | 8 | 1 | Cleveland | 1800 | 10 | 11 | 3 | Medina | 1811 | 12 | 13 | 4 | Dayton | 1812 | 14 | 15 | 6 | Mount Vernon | 1813 | 50 | 50 唯一的区别是WHERE / HAVING的位置,因为它在GROUP BY语句之前,它将在分组发生之前进行过滤,从而获得所需的结果. MAX(users.year)确保您始终获得最大的一年.如果这对您无关紧要,可以用SELECT *替换SELECT`id`,`name`,MAX(users.year)为`year`,纬度,经度

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧