为了账号安全,请及时绑定邮箱和手机立即绑定

为什么使用GROUP BY,不能用rownum?求解释?

为什么使用GROUP BY,不能用rownum?求解释?

慕神8447489 2021-08-25 19:15:03
员工编号 日期1 日期2000100 2010-6-7 2010-6-1 09:05:00000100 2010-6-6 2010-6-1 11:05:00000100 2010-6-6 2010-6-1 11:10:00现在想取最后一条,大家帮帮忙啊。
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

SELECT *
FROM tab t1
WHERE 员工编号||T0_CHAR日期1)|| T0_CHAR(日期2)
IN (SELECT 员工编号||T0_CHAR(日期1)|| T0_CHAR(MAX(日期2))
FROM tab
WHERE 员工编号 = t1.员工编号
AND 日期1 = t1.日期1
GROUP BY 员工编号, 日期1)

看你这个应该是ORACLE,是取得日期最小的对应的时间最大记录吧,如果这样的话,可以这样写

找出日期最小的记录。...
SELECT 员工编号, 日期1, 日期2 FROM TAB t1
WHERE NOT EXISTS (SELECT 1 FROM tab
WHERE t1.员工编号 = 员工编号 AND t1.日期1 > 日期1

然后按照日期2降序排列,取得第一行值,为什么不可以用ROWNUM呢?用这个快很多哦。。
如果不用rownum就要这样整了。。。
SELECT 员工编号, 日期1, 日期2
from ((SELECT 员工编号, 日期1, 日期2 ROW_NUMBER() OVER(ORDER BY 日期2 DESC) rk
FROM (SELECT 员工编号, 日期1, 日期2
FROM TAB t1
WHERE NOT EXISTS (SELECT 1 FROM tab
WHERE t1.员工编号 = 员工编号 AND t1.日期1 > 日期1) t
WHERE rk = 1 ) t2



查看完整回答
反对 回复 2021-08-30
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

SELECT * FROM TB T WHERE 日期2=(SELECT MAX(日期2) FROM TB WHERE 员工编号=T.员工编号)

查看完整回答
反对 回复 2021-08-30
  • 2 回答
  • 0 关注
  • 501 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信