Product というテーブルがあります。MAX の製造日を持つすべての製品レコードを選択する必要があります。
テーブル データのサンプルを次に示します。
Id ProductName ManufactureDate
1 Car 01-01-2015
2 Truck 05-01-2015
3 Computer 05-01-2015
4 Phone 02-01-2015
5 Chair 03-01-2015
すべてのレコードの最大日付は 2015 年 5 月 1 日であり、これら 2 つのレコードの最大日付は次のとおりであるため、結果は次のようになります。
Id ProductName ManufactureDate
2 Truck 05-01-2015
3 Computer 05-01-2015
これを行う唯一の方法は、最初にテーブル全体に対してクエリを実行して最大日付を調べ、それを変数 @MaxManufatureDate に格納することです。次に、ManufactureDate=@MaxManufactureDate である 2 番目のクエリを実行します。もっと良い方法があると何かが教えてくれます。
このテーブルには 100 万以上のレコードがあります。
これが私が現在行っている方法です:
@MaxManufactureDate = select max(ManufactureDate) from Product
select * from Product where ManufactureDate = @MaxManufactureDate
if figure これは、where 句で副選択を行うよりもはるかに優れています。それとも、これは where 句でサブセレクトを行うのとまったく同じことですか? 行ごとにクエリが実行されるかどうか、または sqlserver が変数値をメモリに格納したかどうかはわかりません。