Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL |从一个表中选择两个最大值_Mysql_Sql - Fatal编程技术网

MySQL |从一个表中选择两个最大值

MySQL |从一个表中选择两个最大值,mysql,sql,Mysql,Sql,我有ID(电视剧ID)、T(翻译ID)、S(季节)、E(插曲) 我需要将其转换为: | ID | T | S | E | | 1 | 1 | 1 | 2 | | 1 | 1 | 1 | 3 | | 1 | 2 | 1 | 3 | | 2 | 3 | 2 | 1 | | 2 | 3 | 3 | 1 | 为此: | ID | T | S | E | | 1 | 1 | 1 | 3 | | 1 | 2 | 1 | 3 | | 2 | 3 | 3 |

我有ID(电视剧ID)、T(翻译ID)、S(季节)、E(插曲)

我需要将其转换为:

| ID | T | S | E |  
| 1  | 1 | 1 | 2 |  
| 1  | 1 | 1 | 3 |  
| 1  | 2 | 1 | 3 |  
| 2  | 3 | 2 | 1 |  
| 2  | 3 | 3 | 1 |  
为此:

| ID | T | S | E |  
| 1  | 1 | 1 | 3 |  
| 1  | 2 | 1 | 3 |  
| 2  | 3 | 3 | 1 |  
我的想法是:

SELECT `ID, `T`, `S`, `E`
FROM `UPDATE`
WHERE
`S` = (SELECT MAX(`S`) FROM `UPDATE` WHERE `ID` = `ID`)
AND `E` = (SELECT MAX(`E`) FROM `UPDATE` WHERE `ID` = `ID` AND `S` = (SELECT MAX(`S`) FROM `UPDATE` WHERE `ID` = `ID`))
GROUP BY `ID`, `T`
ORDER BY `TIMESTAMP` DESC

我想这会管用的。您需要首先确定每个ID和T的最大值S。一旦确定了这些值,就可以在所有三个字段上连接回原始表以获得最大值E

   SELECT A.ID, A.T, A.S, MAX(B.E) as E
    FROM (
    SELECT ID, T, MAX(S) AS S
    FROM `UPDATE` U
    GROUP BY ID, T) A
    INNER JOIN `UPDATE` B
    ON A.ID = B.ID AND A.T = B.T AND A.S = B.S
    GROUP BY A.ID, A.T, A.S
使用
notexists()
获取每对
id、t
max()的最新一季,获取最新一集

select id, t, s, max(e) as e
from tbl
where not exists (
  select 1
  from tbl as i
  where i.id = tbl.id
    and i.t  = tbl.t
    and i.s  > tbl.s
    )
group by id, t, s
或者使用
左连接作为:

select tbl.id, tbl.t, tbl.s, max(tbl.e) as e
from tbl 
  left join tbl i
    on i.id = tbl.id
      and i.t  = tbl.t
      and i.s  > tbl.s
where i.id is null
group by tbl.id, tbl.t, tbl.s;
rextester演示:

返回

+----+---+---+---+
| id | t | s | e |
+----+---+---+---+
|  1 | 1 | 1 | 3 |
|  1 | 2 | 1 | 3 |
|  2 | 3 | 3 | 1 |
+----+---+---+---+

请解释你的逻辑。你的结果的标准是什么?也就是说,您希望在结果集中得到什么值?另外,您的查询生成了什么?是否有效?您的问题是什么?我需要同时具有最大s和E的记录。我的查询不起作用,因为我不知道如何在子查询中使用相同的ID。我不能在查询中使用max(),因为它将只返回一个结果,但是我需要每个T的最大S和E。@diecode添加了一个rextester演示,这样您就可以看到结果返回每个ID的最大S和E,TMySQL执行这个太长时间了,我无法得到响应。我尝试使用with
TIMESTAMP>=NOW()-INTERVAL 1 DAY
为什么MySQL会在这个查询上阻塞?@diecode在更新前后添加了反勾号,它被解释为一个命令而不是一个表名。现在试试。@diecode实际上使用了单引号。更正为反勾号。但不确定这是否是mysql的正确语法。我尝试了这个。MySQL错误“未知列”。还试了“A”。“ID”太棒了!非常感谢。