1

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 が変数値をメモリに格納したかどうかはわかりません。

4

3 に答える 3

4
select * from product
where manufactureDate = (select max(manufactureDate) from product)

内側の select-statements は最大の日付を選択し、外側はその日付を持つすべての製品を選択します。

于 2015-09-23T19:17:58.890 に答える
0

サブクエリを使用できます

 SELECT * 
 FROM Product 
 WHERE ManufactureDate = (
   SELECT ManufactureDate 
   FROM Product 
   ORDER BY ManufactureDate 
   LIMIT 1
 );`

ASC正しい順序を使用またはDESC収集する必要がある場合があります

于 2015-09-23T19:18:49.570 に答える
0

このパターンを試してください:

SELECT Id, ProductName, ManufactureDate
FROM (
    SELECT Id, ProductName, ManufactureDate, MAX(ManufactureDate)OVER() AS MaxManufactureDate
    FROM Product P
    ) P
WHERE P.MaxManufactureDate = P.ManufactureDate

基本的に、ウィンドウ関数を使用してインライン ビューで探しているデータを取得し、外側のクエリで where 句を使用して一致させます。

于 2015-09-23T19:19:11.773 に答える