0

私がやろうとしている非常に単純なクエリ。

2 つの日付を持つ請求コードを選択しようとしています。

1) 最新/MAX 発効日、および 2) テーブル内の最新/MAX 日付より前の日付。

請求コードは、対応するさまざまな発効日とともに表に何度もリストされています。一部の請求コードは、1 つの発効日のみで 1 回リストされ、その他は 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]

結合のサブクエリで外部クエリのテーブルを参照できないことはわかっていますが (同じテーブルであっても)、どうすれば同様のことができますか? または、2番目の最大日付を取得することをどのように提案しますか?

残念ながら、テーブルに行番号はありません。

助けてください。ありがとう。

サンプル結果

請求コード 最大日付 最大前の日付

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 に答える