sql - oracle sql如何选择第一行和最后一行两个选择
问题描述
我有两个选择。第一个是
select usuario,fecha from (
select mam.fecha fecha , u.COD_USUARIO usuario
from r_mod_asignar_material mam ,
r_usuarios u
where mam.cod_usuario = u.cod_usuario
and u.ID_CENTRO_GESTION = '1'
and trunc(mam.FECHA) = to_date('13/09/2018','dd/mm/yyyy')
and mam.ACCION = 'A'
order by mam.fecha asc )
where rownum = 1) a
此选择返回 fecha 和 usuario。
现在我有另一个选择,它是相同的,但改变了位置。
select usuario,fecha from (
select mam.fecha fecha , u.COD_USUARIO usuario
from r_mod_asignar_material mam ,
r_usuarios u
where mam.cod_usuario = u.cod_usuario
and u.ID_CENTRO_GESTION = '1'
and trunc(mam.FECHA) = to_date('13/09/2018','dd/mm/yyyy')
and mam.ACCION = 'A'
order by mam.fecha desc ) b1
where rownum = 1
) b
我想从 usuario 相同的第一个和第二个选择返回 fecha 和 usuario。
我尝试内联选择,但第一个选择返回的usuario与第二个选择返回的不一样
select a.fecha fecha1, a.usuario usuario1 ,b.fecha fecha2,b.usuario usuario2
from (
select usuario,fecha from (
select mam.fecha fecha , u.COD_USUARIO usuario
from r_mod_asignar_material mam ,
r_usuarios u
where mam.cod_usuario = u.cod_usuario
and u.ID_CENTRO_GESTION = '1'
and trunc(mam.FECHA) = to_date('13/09/2018','dd/mm/yyyy')
and mam.ACCION = 'A'
order by mam.fecha asc )
where rownum = 1) a
join
(select usuario,fecha from (
select mam.fecha fecha , u.COD_USUARIO usuario
from r_mod_asignar_material mam ,
r_usuarios u
where mam.cod_usuario = u.cod_usuario
and u.ID_CENTRO_GESTION = '1'
and trunc(mam.FECHA) = to_date('13/09/2018','dd/mm/yyyy')
and mam.ACCION = 'A'
order by mam.fecha desc ) b1
where rownum = 1
) b
on a.usuario = b.usuario
解决方案
您可以改用 row_number() 吗:
SELECT
usuario
, fecha
FROM (
SELECT
mam.fecha fecha
, u.COD_USUARIO usuario
, ROW_NUMBER() OVER (PARTITION BY u.cod_usuario ORDER BY mam.fecha ASC) AS rn_asc
, ROW_NUMBER() OVER (PARTITION BY u.cod_usuario ORDER BY mam.fecha DESC) AS rn_desc
FROM r_mod_asignar_material mam
INNER JOIN r_usuarios u ON mam.cod_usuario = u.cod_usuario
WHERE u.ID_CENTRO_GESTION = '1'
AND trunc(mam.FECHA) = to_date('13/09/2018', 'dd/mm/yyyy')
AND mam.ACCION = 'A'
) b1
WHERE (rn_asc = 1 OR rn_desc = 1)
推荐阅读
- python - 使用 Nor 逻辑的 While 循环
- python - 尝试使用递归函数改变通过引用传递的变量?
- xsl-fo - 天线屋的非破坏空间
- c# - Unity3d Swipe 跳转不是很灵敏
- postgresql - Postgres“没有找到任何命名的关系
" - postgresql - 为什么 PostgreSQL 将 WAL 文件保留在逻辑复制上的时间超过了必要的时间?如何限制它们?
- c++ - Mac 上的 Qt Desktop:使用子面板调整 QFormLayout 大小
- postgresql - Amazon Redshift 为 RANDOM 使用什么伪随机数生成器?
- java - 有没有办法在java中使用图形按钮设置数组的值?
- amazon-web-services - 从 SAM 获取 Cloudformation 脚本