gpt4 book ai didi

mysql - 使用 SQL 进行多重排序

转载 作者:行者123 更新时间:2023-11-29 08:47:59 24 4
gpt4 key购买 nike

我有一个表格来组织节目的节目(每个节目将在多个节目中执行)。我需要查看它们按时间顺序排列到程序中的位置。

SQL 查询实际上要长得多,但简而言之:

SELECT * FROM show_table ORDER BY program, timebegin

此表中的结果:

    # show_table

program | timebegin
3399 Do, 01. Nov. 2012 20 Uhr
3399 Fr, 02. Nov. 2012 20 Uhr
3399 Sa, 03. Nov. 2012 20 Uhr
3401 Do, 08. Nov. 2012 20 Uhr
3401 Fr, 09. Nov. 2012 20 Uhr
3401 Sa, 10. Nov. 2012 20 Uhr
3719 So, 04. Nov. 2012 20 Uhr
3739 Mo, 12. Nov. 2012 20 Uhr
3777 So, 04. Nov. 2012 12 Uhr

因此,程序本身是按时间排序的,但我希望顺序略有不同,如下所示:

program  |   timebegin     
3399 Do, 01. Nov. 2012 20 Uhr
3399 Fr, 02. Nov. 2012 20 Uhr
3399 Sa, 03. Nov. 2012 20 Uhr
3777 So, 04. Nov. 2012 12 Uhr
3719 So, 04. Nov. 2012 20 Uhr
3401 Do, 08. Nov. 2012 20 Uhr
3401 Fr, 09. Nov. 2012 20 Uhr
3401 Sa, 10. Nov. 2012 20 Uhr
3739 Mo, 12. Nov. 2012 20 Uhr

现在一切都按timebegin排序,而程序不会被拦截。基本上,我不想按程序排序,而是按 timebegin 排序,而是将所有程序分组在一起。

这可以用纯 mySQL 实现吗?还是我必须应用服务器端逻辑?

最佳答案

你可以这样做:

SELECT show_table.program, show_table.timebegin
FROM show_table
INNER JOIN (
SELECT program, MIN(timebegin) AS firsttime
FROM show_table
GROUP BY program
) AS groups
ON (show_table.program = groups.program)
ORDER BY groups.firsttime, show_table.program, show_table.timebegin;

基本上,还有另一个查询获取每个节目组的最小timebegin(称为firsttime),然后该查询将连接到原始表。然后,我们只需按 firsttime 排序即可正确排序程序组,并按 timebegin 排序即可正确排序程序组内的行。它们之间的 ORDER BY 中的 program 字段就在那里,以防两个程序组碰巧具有相同的 firsttime,因此我们不会混合使用在这种情况下他们。

关于mysql - 使用 SQL 进行多重排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12074906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com