我正在努力做的非常简单的查询。
我正在尝试选择两个日期的收费代码:
1)最近/ MAX生效日期和 2)表格中最近/ MAX日期之前的日期。
费用代码在表格中列出了多次,各种相应的生效日期。一些费用代码列出一次,只有一个生效日期,其他费用代码列出8次,有效期为8个。
这是我正在尝试做的事情:
select
BP.[mnemonic] [Charge Code]
,MAX (BP.[std_effective_date]) [Max date]
,BP2.[Date Prior to Max]
from
[TABLE1] BP
left outer join
(select distinct [mnemonic], MAX ([std_effective_date]) [Max Date]
from
[TABLE1]
where [std_effective_date] < BP.[std_effective_date] group by [mnemonic]) BP2
ON BP.[mnemonic] = BP2.[mnemonic]
where
BP.[mnemonic] IN ('38066','38073','38080')
group by BP.[mnemonic]
我知道我不能在连接中的子查询中引用外部查询中的表(即使它是同一个表)但是我该如何做类似的事情呢?或者你会如何建议获得第二个最大日期?
遗憾的是,表中没有行号。
请帮忙。 感谢。
样本结果
收费代码最长日期早于最高日期
38066 2013-02-01 2013-02-01
38073 2013-02-01 2013-02-01
答案 0 :(得分:2)
SELECT t1.mnemonic
, MAX(t1.std_effective_date) current
, MAX(t2.std_effective_date) previous
FROM tbl1 t1
LEFT JOIN tb1 t2 ON t2.mnemonic = t1.mnemonic
AND t2.std_effective_date < t1.std_effective_date
WHERE t1.mnemonic IN ('38066','38073','38080')
GROUP BY t1.mnemonic
答案 1 :(得分:0)
假设SQL Server(您的问题上的语法似乎正在使用它),您可以使用OUTER APPLY
:
SELECT A.[mnemonic] [Charge Code],
A.[Max date],
B.[std_effective_date] [Date Prior to Max]
FROM ( SELECT [mnemonic],
MAX([std_effective_date]) [Max date]
FROM TABLE1
GROUP BY [mnemonic]) A
OUTER APPLY (SELECT TOP 1 [std_effective_date]
FROM TABLE1
WHERE [mnemonic] = A.[mnemonic]
AND [std_effective_date] < A.[Max date]
ORDER BY [std_effective_date] DESC) B
Here is a sqlfiddle及其演示。
答案 2 :(得分:0)
试试这个
Select b.mnemonic ChargeCode,
b.std_effective_date Maxdate,
b.DatePriortoMax
from TABLE1 b
Where std_effective_date =
(Select Max(std_effective_date) From Table1
Where mnemonic = b.mnemonic)
Or std_effective_date =
(Select Max(std_effective_date) From Table1
Where mnemonic = b.mnemonic
And std_effective_date < b.std_effective_date)