0

我正在尝试做的非常简单的查询。

我正在尝试选择具有两个日期的收费代码:

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

4

3 回答 3

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
于 2013-04-09T18:14:17.590 回答
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

这是一个带有演示的sqlfiddle 。

于 2013-04-09T18:16:20.270 回答
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) 
于 2013-04-09T18:16:55.207 回答