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/