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

时间:2018-06-27 10:37:14

标签: 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或相关运算符。

1 个答案:

答案 0 :(得分:0)

尝试一下:

如果您想要第一个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)