0

このようなテーブルがあります

id  type        type_id cust    ip_address      datetime
395 Category    5       0       119.63.196.29   2012-11-27 00:34:21
394 Cart        812     0       84.208.217.178  2012-11-27 00:31:48
393 Cart        812     0       84.208.217.178  2012-11-27 00:31:41
392 Cart        812     0       84.208.217.178  2012-11-27 00:31:35
391 Product     812     0       84.208.217.178  2012-11-27 00:31:34

個別の type+type_id データを持つ id desc で並べられた 4 つの行を選択したいと考えています。

type と type_id の組み合わせはすでに ID 394 にあるため、クエリの結果から ID 393 と 392 が削除されます。

疑似コード: select * from table where type and type_id is different from the resultset, order by id desc limit 4

4

3 に答える 3

3
select * from table
where id in 
(
  select min(id)
  from table 
  group by  type, type_id 
)
order by id desc
limit 4
于 2012-11-27T00:33:26.497 に答える
0
SELECT *
  FROM AnonymousTable AS a1
  JOIN (SELECT type, type_id, MAX(id) AS id
          FROM AnonymousTable
         GROUP BY type, type_id
       ) AS a2
    ON a1.type = a2.type AND a1.type_id = a2.type_id AND a1.id = a2.id

ただし、ID 値はおそらく一意であるため、サブクエリとその後の結合を簡素化できます。

SELECT *
  FROM AnonymousTable AS a1
  JOIN (SELECT MAX(id) AS id
          FROM AnonymousTable
         GROUP BY type, type_id
       ) AS a2
    ON a1.id = a2.id

が一意でなくても (との組み合わせが一意でidある限り)、長い形式は正しい答えを生成します。idtypetype_id

于 2012-11-27T00:39:22.190 に答える
0

これを試して:

SELECT t1.* 
FROM table t1
INNER JOIN 
(
   SELECT MAX(id) maxid, type_id, type
   FROM table
   GROUP BY type_id, type
) t2 ON t1.id = t2.maxid AND t1.type = t2.type AND t1.type_id = t2.type_id
ORDER BY t1.id desc 
LMIT 4;

SQL フィドルのデモ

于 2012-11-27T00:39:25.257 に答える