タイトル | : Re^3: フィールド−サブクエリの形の実行 |
記事No | : 172215 |
投稿日 | : 2018/03/31(Sat) 18:52 |
投稿者 | : hatena |
解決済 | : ON |
いろいろ考えられます。
フィールドサブクエリを使うなら、下記とか。
案1 SELECT A.コード, (SELECT 点数 FROM B WHERE B.コード= A.コード AND B.番号=1) -(SELECT TOP 1 点数 FROM B WHERE B.コード= A.コード ORDER BY B.番号 DESC) AS 点差 FROM A;
あるいは、抽出条件を使って
案2 SELECT B.コード, B.点数-B1.点数 AS 点差 FROM B INNER JOIN B AS B1 ON B.コード = B1.コード WHERE B.番号=1 AND B1.番号=(SELECT Max(番号) FROM B AS B2 WHERE B2.コード=B1.コード); ただ、上記の2案は相関サブクエリになるので、速度的に不利になるかも。 そこで、結合を使って、
案3 SELECT C.コード, B.点数-B1.点数 AS 点差 FROM ( (SELECT コード, Min(番号) AS Min番号, Max(番号) AS max番号 FROM B GROUP BY B.コード) AS C INNER JOIN B ON C.コード = B.コード AND C.Min番号 = B.番号) INNER JOIN B AS B1 ON C.Max番号 = B1.番号 AND C.コード = B1.コード;
とか、
案4 SELECT D.コード, D.点数-B.点数 AS 点差 FROM ( (SELECT B.[コード], B.点数 FROM B WHERE B.番号=1) AS D INNER JOIN E ON D.コード = E.コード) INNER JOIN B ON E.Max番号 = B.番号 AND E.コード = B.コード);
|