2012-03-05 17 views
2

同じテーブルに参加せずに日付の最も高い行を取得し、max(date)を使用するオプションがありますか?有効なオプションを削除してTop1の注文ですか?SQL Serverの最終日付

私はSQL Server 2000を使用しています。パフォーマンスは重要です。

編集:

表1:

columns: part - partdesc 

表2:

columns: part - cost - date 


select a.part,partdesc,b.cost 
left join(select cost,part 
      right join(select max(date),part from table2 group by part) maxdate ON maxdate.date = bb.date 
      from table2 bb) b on b.part = a.part 
from table1 

作品上記のコードであれば、私は知らないが、それは私が嫌いなクエリです。そして私は非効率的だと思う。

+4

「MAX」の日付を使用できないのはなぜですか? 「TOP 1 ORDER BY DATE DESC」は本質的に同じ動作であるが、最も高い値を見つけるのではなく、テーブル全体を順序付けることができるので、効率が悪くなる可能性がある。 – JNK

+0

@JNKフィルターを使用すると、表の行は最大10行になります。通常の2行。それらの行から、私は最後の日付が必要です。 – BBAA

+0

10行しかない場合、なぜパフォーマンスは考慮されますか? – JNK

答えて

1

ここでは、編集に基づいていくぶん簡略化されたクエリです。

SELECT 
    a.part, 
    a.partdesc, 
    sub.cost 
FROM 
    Table1 A 
INNER JOIN 
    (SELECT 
     B.part, 
     cost 
    FROM 
     Table2 B 
    INNER JOIN 
     (SELECT 
      part, 
      MAX(Date) as MaxDate 
     FROM 
      Table2 
     GROUP BY 
      part) BB 
     ON bb.part = b.part 
     AND bb.maxdate = b.date) Sub 
    ON sub.part = a.part 

それは、クエリ全体に対して一度だけ実行されますので、サブサブクエリがうまくいけばないかつて一部の値ごとに、現在のバージョンよりも少し速く実行されます。

+0

K、私はこれと一緒に行くだろう。ご協力いただきありがとうございます。 – BBAA

1
SELECT TOP 1 columnlist 
FROM table 
ORDER BY datecol DESC 

は、あなたのdatacolsは、それが日ごとに1つの行だ、とあなたの日付は必ず、その後、ことを反映している場合は、他の言葉で(結果が必要得ることを十分に正確であると仮定して、確かに有効なオプションです。それは、いくつかのなら1分あたりの行数、あなたは十分正確ではないかもしれません)。

パフォーマンスは、インデックス戦略とハードウェアによって異なります。

関連する問題