按重复项和行数筛选mysql查询

按重复项和行数筛选mysql查询,mysql,Mysql,任务是获取订单代码列表,其中有两个以上不同的特殊代码, 现在我已经有了这个疑问 SELECT o.id AS iOrderId, o.code AS sOrderCode, oa.pnr AS sSpecialCode FROM order_air AS oa JOIN orders AS o ON 1 AND oa.order_id = o.id WHERE 1 AND o.st

任务是获取订单代码列表,其中有两个以上不同的特殊代码, 现在我已经有了这个疑问

SELECT
    o.id        AS iOrderId,
    o.code          AS sOrderCode,
    oa.pnr          AS sSpecialCode
FROM
    order_air AS oa
JOIN
    orders AS o ON 1
        AND oa.order_id = o.id
WHERE 1 
    AND o.status = 11
    AND oa.issued = 1
    AND oa.change_status != 0
    AND oa.issued_date BETWEEN NOW() - INTERVAL 12 MONTH AND NOW()
GROUP BY o.id
HAVING COUNT(*) >= 2
LIMIT 20
它还给了我

一切正常,但此查询不检查不同的specialcodes,只返回超过2个特殊代码的所有ordercodes。 我也尝试过查看IF保存以前的orderid,然后用它进行检查,但我不知道如何将以前的id存储到@prev之类的东西中,所以这对我没有帮助,有没有办法过滤这个队列

加入
JOIN
orders AS o ON 1
    AND oa.order_id = o.id
    AND something < something else
在1号命令为o 和oa.order_id=o.id 还有别的
我想这就是你想要做的

SELECT
    o.id        AS iOrderId,
    o.code      AS sOrderCode
FROM
    orders AS o
JOIN
    (SELECT order_id, COUNT(DISTINCT pnr) AS cnt
     FROM order_air
     WHERE issued = 1
       AND change_status != 0
       AND issued_date BETWEEN NOW() - INTERVAL 12 MONTH AND NOW()
     GROUP BY order_id) oa_count
ON o.id = oa_count.order_id

WHERE oa_count.cnt >= 2 
  AND o.status = 11

LIMIT 20

有什么解释吗?没有,您的查询返回iOrderId和所有类似的oa.pnr:),问题是“如果有两个以上不同的特殊代码”,我刚刚将答案更新为只计算不同的
pnr
s。这就是你的意思吗?