我已经看了一会儿,我不确定我是否需要某种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行))。
答案 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