mysql - 如何为每个唯一字段仅选择 1 行(在重复的情况下由另一个字段确定哪个字段)

标签 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 行)。

最佳答案

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

关于mysql - 如何为每个唯一字段仅选择 1 行(在重复的情况下由另一个字段确定哪个字段),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14282718/

相关文章:

python - Trac 使用数据库身份验证

Mysql创建一对一关系

php - MySQL更新查询创建新表行而不是更新表行

python - 使用Python脚本获取标题标签的内容

sql - Postgres 上的 C 语言环境和 Posix 语言环境有什么区别?

php - PDO 将信息从一个数据库插入到另一个数据库

mysql - 检查两列mysql之间的多个值

sql - Postgres Copy - 导入带逗号的整数

PHP/PDO - 将数据绑定(bind)到准备好的 SQL 语句会破坏它

php - 为什么这个 PDO 语句会默默地失败?