如何为每个唯一字段仅选择1行(另一个字段确定重复的字段)

时间:2013-01-11 16:44:06

标签: mysql sql pdo greatest-n-per-group

我已经看了一会儿,我不确定我是否需要某种IF语句,LIMIT语句或完全不同的东西。

状况

我有一个类似这样的数据库:

id    |   elem_id   |  elem_data  | draft
1     |  uniq1234   |  examplestr |   0
2     |  uniq1653   |  examplestr |   1
3     |  uniq9964   |  examplestr |   0
4     |  uniq1234   |  examplestr |   1

依此类推......

我的意图

我想为每个唯一elem_id选择一行。如果存在两个,我想选择草案值为1的那个。(因此,对于上表的查询,它会找到elem_id uniq1234的两次出现,并选择草案值为1(即第4行))。

2 个答案:

答案 0 :(得分:4)

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  elem_ID, MAX(`Draft`) maxDraft
            FROM tableName
            GROUP BY elem_ID
        ) b ON a.elem_ID = b.elem_ID AND
                a.`draft` = b.maxDraft

答案 1 :(得分:-2)

如果您只选择总共1行,则可以使用ORDER magic

执行此操作
SELECT
  id,
  elem_id,
  elem_data,
  draft
FROM your_table
WHERE elem_id = 'uniq1234'
ORDER BY draft DESC
LIMIT 1

如果要在结果中获取多行,请按elem_id分组以获取最大草稿,然后嵌套该子查询

SELECT
  a.id,
  a.elem_id,
  a.elem_data,
  a.draft
FROM your_table a,
(SELECT
   b.elem_id,
   MAX(b.draft) as m
 FROM your_table b
 GROUP BY b.elem_id) sub
WHERE a.elem_id = sub.elem_id
  AND a.draft = sub.m