0

私は次のようなクエリを使用しています

select * from audittable where a_id IN (1,2,3,4,5,6,7,8);

ID ごとに 5 ~ 6 レコードが返されます。IDごとに最後から2番目のレコードを取得したかったのです。これを 1 つの SQL ステートメントで実行できますか。

4

3 に答える 3

0

特定の行にデータが挿入されたときのように、データベースにある場合、 DateCreatedまたはcolumn保存している場合は、次のようなクエリを使用できますDateTime

select at1.* from audittable at1 where 
datecreated in( select max(datecreated) from audittable at2
where 
at1.id = at2.id
order by datecreated desc
);

LIMIT関数を使用することもできます。

ご理解とご協力をお願いいたします。

于 2013-06-06T05:47:25.527 に答える
0

このクエリを試してください

SELECT 
   * 
FROM 
   (SELECT 
       @rn:=if(@prv=a_id, @rn+1, 1) as rId,
       @prv:=a_id as a_id,
       ---Remaining columns
   FROM 
       audittable
   JOIN
       (SELECT @rn:=0, @prv:=0) t
   WHERE
       a_id IN (1,2,3,4,5,6,7,8)
   ORDER BY 
       a_id, <column> desc)tmp --Replace column with the column with which you will determine it is the last record
WHERE 
   rId=1;
于 2013-06-06T05:22:02.610 に答える
0

SQLite では、列 a_id と b があります。a_id ごとに、一連の b を取得します。b の最新/最高 (row_id、日付、または別の自然に増加するインデックスに関して最大​​) の 1 つを取得したい場合

SELECT MAX(b), *
FROM audittable
GROUP BY a_id

ここでMAXは、各グループから最大のbを取得するのに役立ちます。

MySQL が MAX b をテーブルの他の * 列に関連付けないという悪いニュースです。ただし、a_id 列と b 列を持つ単純なテーブルの場合でも使用できます。

于 2014-01-22T18:12:50.480 に答える