从没有子字符串索引的有序组中选择第一行(group\u concat())

enyaitl3  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(386)

这个问题在这里已经有答案了

获得每组分组结果的前n个记录(11个答案)
两年前关门了。
在mysql中,有没有其他方法可以在不使用组连接和子字符串索引技巧的情况下达到与下面的查询相同的效果?
当我每场演出有几千张票的时候,这个查询有多糟糕?
重点是按性能对票证进行分组,在这些组中按状态排序票证,然后选择first ticket.id per group。

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没有第一个或相关的操作符。

fquxozlt

fquxozlt1#

试试这个:
如果需要第一个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)

相关问题