私は次のようなクエリを使用しています
select * from audittable where a_id IN (1,2,3,4,5,6,7,8);
ID ごとに 5 ~ 6 レコードが返されます。IDごとに最後から2番目のレコードを取得したかったのです。これを 1 つの SQL ステートメントで実行できますか。
私は次のようなクエリを使用しています
select * from audittable where a_id IN (1,2,3,4,5,6,7,8);
ID ごとに 5 ~ 6 レコードが返されます。IDごとに最後から2番目のレコードを取得したかったのです。これを 1 つの SQL ステートメントで実行できますか。
特定の行にデータが挿入されたときのように、データベースにある場合、 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
関数を使用することもできます。
ご理解とご協力をお願いいたします。
このクエリを試してください
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;
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 列を持つ単純なテーブルの場合でも使用できます。