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或相关运算符。
答案 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)