sql - 如何将选择上的最大/最小日期列与上一个日期的数据连接起来
问题描述
我必须加入一个带有 2 个参数的表以显示详细信息的最后更新状态,以检查 MAX(...)/MIN(...) 的完成/正在进行。我能为此做些什么?
我试过 LEFT JOIN 但它返回 null
SELECT a.showonly
, a.want_this_parameter_lastdate
, min(a.xdate) start
, max(a.xdate) stop
, b.lastdate
FROM samedatabase a
LEFT JOIN (SELECT xdate lastdate
, want_this_parameter_lastdate
FROM samedatabase
WHERE ROWNUM = 1
ORDER BY xdate DESC) b
ON a.want_this_parameter_lastdate = b.want_this_parameter_lastdate
WHERE something IN (SELECT DISTINCT equalsomething
FROM another WHERE input like '...')
AND xdate> sysdate - 7
GROUP BY a.showonly, a.want_this_parameter_lastdate, b.lastdate
ORDER BY start ASC;
在我查询后我得到了这个
showonly|want_this_parameter|start |stop |lastdate
a1 |b1* |5/7/19 |6/7/19 |(null)
a2 |b2** |6/7/19 |7/7/19 |(null)
a3 |b1* |7/7/19 |8/7/19 |(null)
a4 |b2** |9/7/19 |10/7/19|(null)
a5 |b4 |10/7/19|11/7/19|(null)
我期待这一点(stop是 a1 中使用的最后 b1 ,lastdate是所有表中使用的最后 b1 )
showonly|want_this_parameter|start |stop |lastdate
a1 |b1* |5/7/19 |6/7/19 |12/17/19--Last B1 used
a2 |b2** |6/7/19 |7/7/19 |11/17/19--Last B2 used
a3 |b1* |7/7/19 |8/7/19 |12/17/19--Last B1 used
a4 |b2** |9/7/19 |10/7/19|12/17/19--Last B2 used
a5 |b4 |10/7/19|11/7/19|12/17/19--Last B4 used
*Same b1
**Same b2
更新 我终于明白了,但仍然担心查询性能的时间,因为 MAX(...) 将获取整个表对吗?我怎样才能提高这个性能。
SELECT a.showonly
, a.want_this_parameter_lastdate
, min(a.xdate) start
, max(a.xdate) stop
, b.lastdate
FROM samedatabase a
LEFT JOIN (SELECT MAX(xdate) lastdate, want_this_parameter_lastdate
FROM samedatabase
GROUP BY want_this_parameter_lastdate) b
ON a.want_this_parameter_lastdate = b.want_this_parameter_lastdate
WHERE something IN (SELECT DISTINCT equalsomething
FROM another
WHERE input like '...')
AND xdate> sysdate - 7
GROUP BY a.showonly, a.want_this_parameter_lastdate, b.lastdate
ORDER BY start ASC;
解决方案
我认为简单的子查询会使工作更快,这样你就可以消除双重分组,这不是必需的:
select showonly, parameter, min(xdate) min_dt, max(xdate) max_dt,
(select max(xdate) from samedatabase where parameter = s1.parameter) lst_dt
from samedatabase s1
where xdate > sysdate - 7
and something in (select equalsomething from another where input like 'i%')
group by showonly, parameter
推荐阅读
- php - 如何在php中用引号分隔数据
- oracle - 将 Varchar2 的返回值从默认(4000)更改为(10char)?
- java - 仅映射 JoinTable 关系中的一列
- javascript - 如何从 HTML 加载带有 cookie 的资源
- sql-server - SQL Server - 有人可以解释这个查询吗?
- python - 运行两次库以在 jupyter 上进行交互式绘图
- firebase - Permission_denied 访问 firebase 数据存储
- git - 向所有分支添加/提交文件
- dataset - 搜索查询日志数据集
- javascript - javascript命名对象中的函数