mysql - 从没有 SUBSTRING_INDEX(GROUP_CONCAT()) 的有序组中选择第一行

标签 mysql mysql-5.7

MySQL 中是否有其他方法可以在不使用 GROUP_CONCAT 和 SUBSTRING_INDEX 技巧的情况下达到与下面的查询相同的效果?

当我每场演出有数千张门票时,这个查询有多糟糕?

重点是按表演对门票进行分组,在这些组中按状态对门票进行排序,并选择每个组的第一个门票.id。

SELECT SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY status), ',', 1)
FROM ticket
GROUP BY performance_id

在其他引擎中我会使用这样的东西:

SELECT FIRST(t.id)
FROM (SELECT * FROM ticket ORDER BY status) AS t
GROUP BY performance_id

但是 MySQL 没有 FIRST 或相关运算符。

最佳答案

试试这个:

如果你想要第一个id(升序模式)

因此,如果您在同一组中拥有 1、2、3 号票,则您将只有 1 号票

SELECT t1.id
FROM ticket t1
WHERE NOT EXISTS
    (SELECT 'PREVIOUS'
    FROM ticket t2
    WHERE t2.id < t1.id
    AND t2.performance_id = t1.performance_id)

如果你想要第一个id(降序模式)

因此,如果您在同一组中拥有 1、2、3 号票,则您将只有 3 号票

SELECT t1.id
FROM ticket t1
WHERE NOT EXISTS
    (SELECT 'NEXT'
    FROM ticket t2
    WHERE t2.id > t1.id
    AND t2.performance_id = t1.performance_id)

关于mysql - 从没有 SUBSTRING_INDEX(GROUP_CONCAT()) 的有序组中选择第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51060659/

相关文章:

mysql - 为 Eloquent 返回的结果中选定的列定义自定义键名称

MySQL JSON_OBJECT 而不是 GROUP_CONCAT

php - 无法获取要过滤的搜索结果

mysql - 如何对重复的 mysql 数据进行非规范化?

php - 在DB表上记录数据

mysql - mysql中的每个数据库是否可以有单独的二进制日志?

mysql - 如何仅对该查询中的 3 个最佳分数求和?

mysql - 根据sql中重复的列ID为重复行值创建新列

MYSQL 和 innoDB 动态改变表的 AUTO_INCREMENT

mysql - Liquibase & MySQL 5.7 时间戳列修改问题