首页 >数据库 >mysql教程 >如何使用 CASE 语句在 MySQL 中基于多个时间戳列对行进行排序?

如何使用 CASE 语句在 MySQL 中基于多个时间戳列对行进行排序?

Susan Sarandon
Susan Sarandon原创
2024-11-15 09:59:02660浏览

How to Order Rows Based on Multiple Timestamp Columns in MySQL with CASE Statement?

MYSQL ORDER BY CASE 问题

这个问题对根据 WHERE 条件根据特定列对行进行排序提出了挑战。考虑提供的具有四行和时间戳列的数据库。目标是对行进行排序,以便两个时间戳列都被视为单个排序标准。

提供的查询最初根据 id_one 和 id_two 字段分别对时间戳进行排序:

SELECT * FROM tablename 
WHERE id_one=27 OR id_two=27 
ORDER BY 
  CASE WHEN id_one=27 THEN timestamp_one END DESC, 
  CASE WHEN id_two=27 THEN timestamp_two END DESC

这种方法会产生一个输出,其中行在每个 id_one 或 id_two 组中排序,但不是作为组合时间戳排序。

为了实现所需的排序,我们可以使用稍微修改的查询:

SELECT id_one, id_two, timestamp_one, timestamp_two      
FROM tablename 
WHERE id_one = 27 
    OR id_two = 27 
ORDER BY 
    CASE 
        WHEN id_one=27 THEN timestamp_one 
        WHEN id_two=27 THEN timestamp_two 
    END DESC 

在这个修改后的查询中,无论哪个 ID 列与 WHERE 条件匹配,timestamp_one 和 timestamp_two 都会被考虑进行排序。 CASE 语句根据 id_one 和 id_two 值选择适当的时间戳。

此修改会产生所需的输出,其中行作为单个时间戳列排序,同时考虑 timestamp_one 和 timestamp_two:


| id_one | id_two | 时间戳_一个 | timestamp_two |

| 27 | 27 35 | 35 9:30 | NULL |

| 35 | 35 27 | 27 空| 9:33 |

| 27 | 27 35 | 35 9:34 | 9:34 NULL |

| 35 | 35 27 | 27 空| 9:35 |

以上是如何使用 CASE 语句在 MySQL 中基于多个时间戳列对行进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn