0

Remark以下に示すようなデータを含むテーブルがあります。

       SerialNo | RemarkNo  | Desp
=============================================
             10 |         1 | rainy
             10 |         2 | sunny
             11 |         1 | sunny
             11 |         2 | rainy
             11 |         3 | cloudy
             12 |         1 | rainy

クエリを実行してSELECT * FROM remark WHERE remark_no IN (SELECT MAX(remark_no) FROM remark GROUP BY serial_no);も、上記の結果が得られます。

どのクエリが次の結果を返しますか。

             10 |         2 | sunny
             11 |         3 | cloudy
             12 |         1 | rainy

つまり、各グループの最後のレコードを返す必要がありますか?

4

3 に答える 3

1
SELECT
  r1.*
FROM remark r1
  LEFT JOIN remark r2
    ON (r1.serial_no = r2.serial_no
    AND r1.remark_no < r2.remark_no)
WHERE r2.remark_no IS NULL;
于 2013-03-16T18:33:43.930 に答える
0

各SerialNoの上位のRemarkNo(および同じ行の他のフィールド):
同じSerialNoの上位のRemarkNoがないすべてのレコードを選択します

SELECT *
FROM remark r1
WHERE NOT EXISTS
  (SELECT SerialNo FROM remark r2
   WHERE (r2.RemarkNo>r1.RemarkNo)
     AND (r2.SerialNo=r1.SerialNo)
  )

http://sqlfiddle.com/#!2/7da1b/21

于 2013-03-16T18:11:38.603 に答える
-2

これを行うには、結果を返し、並べ替え順序を使用します。例えば...

SELECT * from GROUP Order By GROUP.ID DESC

これにより、最後のレコードの順序で結果が最初に返されます。次に、結果をループしない場合は、1つのレコードのみが返されます...最後に記録されたレコードです。

于 2013-03-16T18:12:36.177 に答える