Sql 如何找到val1的最大值,其中val2是最大值?
Sybase数据库管理系统 在我的玩家表中,我有4列:Sql 如何找到val1的最大值,其中val2是最大值?,sql,sybase,Sql,Sybase,Sybase数据库管理系统 在我的玩家表中,我有4列: 玩家 得分 邮政署 加上 如果我想找到玩家的分数,其中post_dt是最大值,add_dt是post_dt和该玩家的最大值,我该怎么做?我下面的查询需要很长时间才能运行,可能效率不高 select player, score from tb t1 where post_dt in (select max(add_dt) from tb t2 where t1.player = t2.playe
select player, score from tb t1
where post_dt in
(select max(add_dt)
from tb t2
where t1.player = t2.player and t2.post_dt in
(select max(post_dt)
from tb t2
where t1.player = t2.player))
桌子
查询的预期结果:
01, 26, 2017-02-01, 2017-01-17
02, 27, 2017-03-25, 2017-03-05
03, 4, 2017-01-03, 2016-12-25
可以通过使用相关子查询来实现这一点
SELECT t1.player,
t1.score
FROM tb t1
WHERE t1.post_dt = (SELECT max(t2.post_dt)
FROM tb t2
WHERE t2.player = t1.player)
AND t1.add_dt = (SELECT max(t2.add_dt)
FROM tb t2
WHERE t2.player = t1.player
AND t2.post_dt = t1.post_dt);
或者,如果DBMS支持窗口函数,请使用rank()
window函数
SELECT x.player,
x.score
FROM (SELECT t.player,
t.score,
rank() OVER (PARTITION BY t.player
ORDER BY t.post_dt DESC,
t.add_dt DESC) r
FROM tb t) x
WHERE x.r = 1;
还有一种选择是内部连接子查询,它分别通过player
或player
和post\dt
构建最大值
SELECT t1.player,
t1.score
FROM tb t1
INNER JOIN (SELECT t2.player,
max(t2.post_dt) post_dt
FROM tb t2
GROUP BY t2.player) t3
ON t3.player = t1.player
AND t3.post_dt = t1.post_dt
INNER JOIN (SELECT t3.player,
t3.post_dt,
max(t3.add_dt) add_dt
FROM tb t3
GROUP BY t3.player,
t3.post_dt) t4
ON t4.player = t1.player
AND t4.post_dt = t1.post_dt
AND t4.add_dt = t1.add_dt;
你的数据库管理系统是什么?你能详细说明一下吗,最好是用一些示例数据。很难理解您的需求。哪种Sybase RDBMS产品(ASE?SQLAnywhere?IQ?Advantage?)和版本?除了Cetin的评论,请阅读,然后回来更新你的问题。我用样本数据更新了我的帖子。这太棒了!非常感谢。我用了你的第二个解决方案。
SELECT t1.player,
t1.score
FROM tb t1
INNER JOIN (SELECT t2.player,
max(t2.post_dt) post_dt
FROM tb t2
GROUP BY t2.player) t3
ON t3.player = t1.player
AND t3.post_dt = t1.post_dt
INNER JOIN (SELECT t3.player,
t3.post_dt,
max(t3.add_dt) add_dt
FROM tb t3
GROUP BY t3.player,
t3.post_dt) t4
ON t4.player = t1.player
AND t4.post_dt = t1.post_dt
AND t4.add_dt = t1.add_dt;