示例表
| 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 |我的目标是
我想选择latitude和longitude的每一个独特的组合。所以我想过滤掉任何重复的对。我还需要过滤掉任何年份小于1500的记录。
这是我想要实现的子集:
| name | year | latitude | longitude |
|--------------|------|----------|-----------|
| Cleveland | 1800 | 10 | 11 |
| Medina | 1811 | 12 | 13 |
| Dayton | 1812 | 14 | 15 |
| Mount Vernon | 1813 | 50 | 50 |每个记录的year都大于1500,没有任何重复的lat,长对。
我试过的
我试图找到一种使用DISTINCT的方法。我发现的一切都没有用。
我也尝试过使用GROUP BY
SELECT *
FROM users
GROUP BY latitude, longitude
HAVING year > 1500;上面的查询的问题是消除了以下两个记录,这些记录都包含lat,长对50,50:
| name | year | latitude | longitude |
|--------------|------|----------|-----------|
| Sandusky | 1105 | 50 | 50 |
| Mount Vernon | 1813 | 50 | 50 |这个小组被淘汰了,因为Sandusky的year还不到1500。我不想要桑杜斯基的唱片,但我想要弗农山。
我注意到如果这两张唱片是这样切换的话:
| name | year | latitude | longitude |
|--------------|------|----------|-----------|
| Mount Vernon | 1813 | 50 | 50 |
| Sandusky | 1105 | 50 | 50 |...then该集团的年份定为1813年,而该集团并未被淘汰。我想按年分类也许能解决问题,但事实并非如此:
SELECT *
FROM users
GROUP BY latitude, longitude
HAVING year > 1500
ORDER BY year DESC;我想要的是什么?
发布于 2015-08-28 14:14:44
这个怎么样?
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 `id`, `name`, MAX(users.year) as `year`, latitude, longitude替换为SELECT *
发布于 2015-08-28 08:14:32
也许我不明白这个问题,但问题很简单:
select * from users u where u.year > 1500;我不知道你想做什么,万一有超过一对相同坐标的一年超过1500。
发布于 2015-08-28 08:11:04
这样怎么样,除非是误读。我确实读过。它做了一些假设,比如你不想用相同的lat消除另一个名字,long。
create table users
( id int auto_increment primary key,
name varchar(50) not null,
year int not null,
latitude int not null,
longitude int not null
);
truncate table users;
insert users (name,year,latitude,longitude) values
('Cleveland',1810,10,11),
('Medina',1811,12,13),
('Dayton',1812,14,15),
('Mount Vernon',1813,50,50),
('Sandusky',1105,50,50);
SELECT distinct name,year,latitude,longitude
FROM users
where year > 1500
ORDER BY year;
+--------------+------+----------+-----------+
| name | year | latitude | longitude |
+--------------+------+----------+-----------+
| Cleveland | 1810 | 10 | 11 |
| Medina | 1811 | 12 | 13 |
| Dayton | 1812 | 14 | 15 |
| Mount Vernon | 1813 | 50 | 50 |
+--------------+------+----------+-----------+https://stackoverflow.com/questions/32266208
复制相似问题