1

我环顾四周,我不确定是否需要某种 IF 语句、LIMIT 语句或完全不同的东西。

情况

我有一个看起来像这样的数据库:

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

等等等等...

我的意图

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

4

2 回答 2

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
于 2013-01-11T16:49:18.960 回答
-2

如果你总共只选择 1 行,你可以用ORDER魔法做到这一点

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
于 2013-01-11T16:49:36.007 回答