首页 >数据库 >mysql教程 >如何使用 MySQL CASE 语句从两列中按较早的时间戳排序?

如何使用 MySQL CASE 语句从两列中按较早的时间戳排序?

Barbara Streisand
Barbara Streisand原创
2024-11-10 15:13:02426浏览

How to Order by the Earlier Timestamp from Two Columns Using MySQL CASE Statement?

MYSQL ORDER BY CASE 问题

在 MySQL 中,在 ORDER BY 子句中使用 CASE 语句允许您根据以下条件指定多个排序条件特殊条件。然而,当尝试对两个不同的时间戳列进行排序时,就好像它们是单个统一的时间戳一样,会出现挑战。

考虑提供的表结构:

-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 09:30 | NULL |
| 35 | 27 | NULL | 09:35 |
| 27 | 35 | 09:34 | NULL |
| 35 | 27 | NULL | 09:33 |
-------------------------------------------------------------------

目标是对行进行排序按较早的时间戳,无论它是存储在 timestamp_one 还是 timestamp_two 列中。以下查询尝试使用 CASE 语句来实现此目的:

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=27 的行进行正确排序,但它无法将时间戳合并为单个排序标准。

要解决此问题,可以按如下方式修改查询:

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 

通过使用单个 CASE 表达式而不是单独的 CASE 表达式对于每个条件的 CASE 语句,MySQL 将时间戳合并为单个排序标准。这可确保行按需要正确排序:

-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 09:30 | NULL |
| 35 | 27 | NULL | 09:33 |
| 27 | 35 | 09:34 | NULL |
| 35 | 27 | NULL | 09:35 |
-------------------------------------------------------------------

以上是如何使用 MySQL CASE 语句从两列中按较早的时间戳排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

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