带有双ORDER BY的MySQL GROUP_CONCAT

时间:2015-05-28 08:09:45

标签: mysql sql-order-by group-concat

我有一个GROUP_CONCAT我需要ORDER BY 2列。问题是,对于我将在任何其他ORDER BY中使用的正常sintax,它将忽略仅由第二列排序的第一列。

示例:

GROUP_CONCAT(
    DC.reference_date,' - ',D.number,'/',D.year,' : ',
    IF(DC.notes IS NOT NULL,DC.notes,'')
    ORDER BY D.number, DC.reference_date SEPARATOR '\r\n'
)

有了这个,我将得到一个按日期排序的清单(而不是数字和按日期排序):

2015-05-25 - 3714/2014 : id 17
2015-05-25 - 2729/2014 : id 19
2015-05-27 - 3714/2014 : id 21
2015-05-27 - 2729/2014 : id 20
2015-05-28 - 3714/2014 : id 18

并且用这个:

GROUP_CONCAT(
    DC.reference_date,' - ',D.number,'/',D.year,' : ',
    IF(DC.notes IS NOT NULL,DC.notes,'')
    ORDER BY D.number SEPARATOR '\r\n'
)

我只能按号码正确获得一份清单:

2015-05-27 - 3714/2014 : id 21
2015-05-28 - 3714/2014 : id 18
2015-05-25 - 3714/2014 : id 17
2015-05-27 - 2729/2014 : id 20
2015-05-25 - 2729/2014 : id 19

我需要的是这样的列表顺序:

2015-05-25 - 3714/2014 : id 17
2015-05-27 - 3714/2014 : id 21
2015-05-28 - 3714/2014 : id 18
2015-05-25 - 2729/2014 : id 19
2015-05-27 - 2729/2014 : id 20

ORDER BY失败原因的任何线索?

根据草莓请求更新,这是整个查询的缩短版本:

SELECT GROUP_CONCAT(DC.reference_date,' - ',D.number,'/',D.year,' : ', IF(DC.notes IS NOT NULL,DC.notes,'') ORDER BY D.number SEPARATOR '\r\n') AS 'd_c', CD.contract_id
FROM gbdc AS DC
LEFT JOIN [...]
WHERE CD.cancel <> 1
AND BP.bill_id IS NULL
GROUP BY CD.contract_id

0 个答案:

没有答案