2016-09-29 17 views
0

私は現在、過去の請求書日付のリストを取得し、2番目の最終請求書日付を一時テーブルを使用してスニークするT-SQLクエリを持っています。つまり、このクエリは、サードパーティアプリケーションのプリプロセッサで使用する必要があります。このプリプロセッサは、テンポラリテーブルの作成と削除をうまく使用できません。ビューまたはテンポラリテーブルを使用せずに次のT-SQLクエリを書く方法はありますか?最大日付のT-SQLクエリ

SELECT (convert(CHAR(10), dateadd(dd, DateDiff(dd, 0, ltradat), 0), 126)) AS 'DateOnly' 
INTO #temp 
FROM matter WITH (NOLOCK) 
    ,ledger WITH (NOLOCK) 
WHERE mclient = '014134' 
    AND lmatter = mmatter 
    AND lzero != 'R' 
    AND mcurrency LIKE '%' 
    AND llcode != 'PAY' 
GROUP BY ltradat 
ORDER BY ltradat 

SELECT max(DateOnly) 
FROM #temp 
WHERE DateOnly < (
     SELECT max(DateOnly) 
     FROM #Temp 
     ) 

DROP TABLE #temp 

#Tempテーブルには、請求書の日付とその請求書に関連する問題の一覧が示されます。選択すると、リストから1つ少ない請求書日付がソートされます(最も古いものから最も古いものまでソートされます)。

私は#TEMPから*を選択した場合、私のようなリストを得る:

2016-06-08 
2016-07-12 
2016-07-26 
2016-08-05 
2016-09-12 

私はT-SQLクエリの最後の部分を実行すると、私は私が必要との結果を得る:

2016-08-05 

この結果は、TEMPテーブルまたはVIEWを使用しない単一のクエリから取得できますか?

ありがとうございます。

-Nick

+0

テーブル変数? CTE?クエリの最初または最後に切り捨てるステージングテーブルを作成しますか? – dfundako

答えて

1

あなたが第二の最新の日付を取得する代わりに一時テーブルまたはビューのサブクエリを使用することはできますか?同様に

SELECT MAX(DateOnly) 
    FROM (
      SELECT TOP 2 (convert(CHAR(10), dateadd(dd, DateDiff(dd, 0, ltradat), 0), 126)) AS DateOnly 
      FROM matter WITH (NOLOCK) 
       ,ledger WITH (NOLOCK) 
      WHERE mclient = '014134' 
       AND lmatter = mmatter 
       AND lzero != 'R' 
       AND mcurrency LIKE '%' 
       AND llcode != 'PAY' 
      GROUP BY ltradat 
      ORDER BY ltradat 
     ) AS b 
+0

注文を変更した後、これは私のために働いた ORDER BY ltradat DESC – NCollinsTE

関連する問題