Sql 如何将“选择”上的“最大/最小日期”列与数据所在的最后日期关联
我必须用两个参数连接一个表,以显示细节的最后更新状态,以检查完成/正在进行的最大/最小。。。。我能为此做些什么 我已尝试左联接,但它返回nullSql 如何将“选择”上的“最大/最小日期”列与数据所在的最后日期关联,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我必须用两个参数连接一个表,以显示细节的最后更新状态,以检查完成/正在进行的最大/最小。。。。我能为此做些什么 我已尝试左联接,但它返回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 xdat
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)
我希望这一站是a1中使用的最后一个b1,最后一个日期是所有表格中使用的最后一个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
更新
我终于明白了这一点,但仍然担心查询性能的时间
因为马克斯。。。能把整张桌子都拿来吗?
我如何才能提高这一性能
选择a.showonly
,a.想要\u此\u参数\u lastdate
,mina.xdate启动
,maxa.xdate停止
,b.最后日期
来自samedatabase a
左连接选择MAXxdate lastdate,想要\u此\u参数\u lastdate
来自samedatabase
按需要分组\u此\u参数\u lastdate b
在a.want\u this\u parameter\u lastdate=b.want\u this\u parameter\u lastdate上
在这里,选择不同的等式
从另一个
其中输入像“…”
和xdate>sysdate-7
分组依据a.showonly,a.want\u此参数\u lastdate,b.lastdate
按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
我认为简单的子查询将使工作更快,这样可以消除不必要的双重分组:
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
没有表中的示例行,很难知道您期望的是什么。向我们展示您表中的一些示例行,您希望得到这个结果。@KaushikNayak我添加了更多示例行和说明。感谢您的建议没有表中的示例行,很难知道您期望的是什么。向我们展示您表中的一些示例行,您希望得到这个结果。@KaushikNayak我添加了更多示例行和说明。谢谢你的建议