SQL第二个最新日期子选择
我有一个问题:SQL第二个最新日期子选择,sql,sql-server,date,max,Sql,Sql Server,Date,Max,我有一个问题: SELECT MAX (EXPDATE) AS PREVDATE, BUSINESSUNIT AS BUSUNIT, UNIT AS UNITNO FROM proddta.V_LeaseExpiry_profile WHERE EXPDATE < ( ( SELECT MAX (EXPDATE) FROM proddta.V_LeaseExpiry_profile
SELECT
MAX (EXPDATE) AS PREVDATE,
BUSINESSUNIT AS BUSUNIT,
UNIT AS UNITNO
FROM
proddta.V_LeaseExpiry_profile
WHERE
EXPDATE < (
( SELECT
MAX (EXPDATE)
FROM
proddta.V_LeaseExpiry_profile
WHERE
TRIM (BUSINESSUNIT) = '33700' AND UNIT = '900')
)
AND
TRIM (BUSINESSUNIT) = '33700'
AND
UNIT = '900'
GROUP BY
BUSINESSUNIT,
UNIT
当我指定业务部门和部门时,这很好,但当我从查询中删除它们时,即-我想对所有部门执行此操作,它不再获取第二个最新日期-它获取最新日期
基本上,我试图找到每个单元的前一个到期日,但可能有重复的行,因此我需要确保它与最大到期日不同。如果您想要第二个到期日,请使用密集排列或偏移/提取:
这将为所有业务单元/单元组合返回适当的值。如果您只需要一个组合,您可以使用where子句来获得一个组合。非常感谢您的快速回复!当我在查询分析器中输入这个时,它告诉我p。是未定义的。。。我遗漏了什么吗?@4bpauly从proddta.V_LeaseExpiry_profile作为p,或者将子查询p.*更改为*这在使用最后一个日期时非常有效。还有一个请求——我现在正试图按业务部门和业务部门对它们进行分组,但似乎不起作用。有什么想法吗?你确定你在使用sql server吗?Trim不是sql server的内置功能。
select p.*
from (select p.*,
dense_rank() over (partition by businessunit, unit
order by EXPDATE desc) as seqnum
from proddta.V_LeaseExpiry_profile
) p
where seqnum = 2;