MySQL显示整个组,在组内按字母顺序排序
我有以下疑问:MySQL显示整个组,在组内按字母顺序排序,mysql,Mysql,我有以下疑问: SELECT * FROM vendors_parts INNER JOIN vendors ON vendors_parts.vendor = vendors.vendor_id WHERE (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @active) OR (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active =
SELECT *
FROM vendors_parts INNER JOIN
vendors ON vendors_parts.vendor = vendors.vendor_id
WHERE (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @active) OR
(vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @inactive)
ORDER BY vendors_parts.old_id, vendors_parts.vendor_part, date_start DESC, vendors_parts.active DESC
以以下格式返回数据:
vendor_part active old_id
b 1 1
a 0 1
a 0 1
b 0 1
x 1 3
z 1 5
c 1 20
c 0 20
我的问题是,在对供应商零件进行升序和活动降序排序时,如何将旧的\u id保持在一起?我想要的输出是:
vendor_part active old_id
b 1 1
a 0 1
a 0 1
b 0 1
c 1 20
c 0 20
x 1 3
z 1 5
我还尝试了一个子查询,该查询根据旧\u id分组,但这将我限制为只有一个唯一的旧\u id:
SELECT *
FROM
(
SELECT * FROM vendors_parts INNER JOIN vendors ON vendors_parts.vendor = vendors.vendor_id
WHERE (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @active) OR (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @inactive)
GROUP BY vendors_parts.old_id
) temp_table
ORDER BY vendor_part
如何显示分组在一起的所有旧\u ID,并在其各自的组中按供应商\u部分的字母顺序进行排序
谢谢这里有一个可能的答案。请注意,在这个答案中,表
tbl
是实际(相当复杂)查询的占位符(我不喜欢使用它,但您可能必须使用临时表来保持查询语法的可管理性):
请参阅以获取实时演示。正如您将看到的,使用您在问题中给出的示例,它产生了预期的结果。我向sqlfidle添加了我的模式和一些示例数据:放置sqlfiddle很好,但您可能应该缩小您的用例范围。也许只限于你在问题中给出的例子。谢谢你的帮助。似乎使用命令是我与临时表一起缺少的。关于结果,我确实有一个问题。。看看我是如何修改你的答案的。你知道供应商的零件不总是按字母顺序排列吗?2新名字3。。。etc@chureema在所有条件相同的情况下,如果您希望按
供应商部分对行进行排序
,则只需将其添加到ORDER by
子句中即可。我据此编辑了他的答案。看见
SELECT tbl.* FROM tbl
JOIN (SELECT MIN(vendor_part) as mvp, old_id FROM tbl GROUP BY old_id) as driver
USING (old_id)
ORDER BY driver.mvp, tbl.old_id, active DESC, tbl.vendor_part