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

などなど...

私の意図

一意のすべてに対して1つの行のみを選択したいと思いますelem_id。2つ存在する場合、ドラフト値が1の1つを選択します(したがって、上記の表のクエリでは、elem_idが2つ見つかりuniq1234、ドラフト値が1の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 に答える