mysql - 按列中的最大值选择唯一行

标签 mysql sql

我有一个包含时区的表,如下示例所示:

CREATE TABLE timezones
(`CountryCode` varchar(2),
 `ZoneName` varchar(35),
 `Offset` int not null,
 `Dst` char(1),
 `TimeStart` decimal(11,0) not null);

INSERT INTO 
timezones (`CountryCode`, `ZoneName`, `Offset`, `Dst`, `TimeStart`)

VALUES
('VA', 'Europe/Vatican', 7200, '1', 1521939600),
('VA', 'Europe/Vatican', 3600, '0', 1540688400),
('VA', 'Europe/Vatican', 7200, '1', 1553994000),

('UA', 'Europe/Zaporozhye', 10800, '1', 1521939600),
('UA', 'Europe/Zaporozhye', 7200, '0', 1540688400),
('UA', 'Europe/Zaporozhye', 10800, '1', 1553994000),

('TR', 'Europe/Istanbul', 7200, '0', 1446944400),
('TR', 'Europe/Istanbul', 7200, '1', 1459040400),
('TR', 'Europe/Istanbul', 10800, '0', 1473195600);
+-------------+-------------------+--------+------+------------+
| CountryCode | ZoneName          | Offset | Dst  | TimeStart  |
+-------------+-------------------+--------+------+------------+
| VA          | Europe/Vatican    |   7200 | 1    | 1521939600 |
| VA          | Europe/Vatican    |   3600 | 0    | 1540688400 |
| VA          | Europe/Vatican    |   7200 | 1    | 1553994000 |
| UA          | Europe/Zaporozhye |  10800 | 1    | 1521939600 |
| UA          | Europe/Zaporozhye |   7200 | 0    | 1540688400 |
| UA          | Europe/Zaporozhye |  10800 | 1    | 1553994000 |
| TR          | Europe/Istanbul   |   7200 | 0    | 1446944400 |
| TR          | Europe/Istanbul   |   7200 | 1    | 1459040400 |
| TR          | Europe/Istanbul   |  10800 | 0    | 1473195600 |
+-------------+-------------------+--------+------+------------+

我需要选择具有唯一 ZoneName 字段且在 TimeStart 列中具有最大值的行。

因此,对于上表,我期望得到以下结果:

+-------------+-------------------+--------+------+------------+
| CountryCode | ZoneName          | Offset | Dst  | TimeStart  |
+-------------+-------------------+--------+------+------------+
| VA          | Europe/Vatican    |   7200 | 1    | 1553994000 |
| UA          | Europe/Zaporozhye |  10800 | 1    | 1553994000 |
| TR          | Europe/Istanbul   |  10800 | 0    | 1473195600 |
+-------------+-------------------+--------+------+------------+

最佳答案

这是一个过滤操作。您可以使用相关子查询:

select t.*
from t
where t.timestart = (select max(t2.timestart) from t t2 where t2.ZoneName = t.ZoneName);

关于mysql - 按列中的最大值选择唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56479374/

相关文章:

sql - partition by/order by 是否暗示查询中的排序?

php - 提交表格。使用php将信息存储在数据库中

php - 内部查询不起作用

Mysql计算不同行的团队排名

sql - 在 Postgres WHERE 子句中使用 IF 语句

c# - 修改Linq代码,加入AND语句加入

php - 如何从cakephp中的数据库表中获取id的值

mysql - 我想限制用户在mysql中只进行选择命令,不进行删除、更新或插入

python - SQLAlchemy : Table primary_key - unexpected keyword argument error

SQL:LIKE where 条件指定一个字母后跟一个数字,然后是其他任何东西?