mysql - SQL 查询 - 打印同一行中一个表的最小值和最大值

标签 mysql sql

我需要一些关于 SQL 查询的帮助。

我有一个表格,其格式和数据如下所示:

id | applicant_id | application_status | status_time
1  | 1234         | received           | 2013-05-06 15:00:00
1  | 1234         | pending            | 2013-05-06 15:30:00
1  | 1234         | approved           | 2013-05-06 16:00:00

我需要解决的问题必须打印以下内容:

applicant_id | initial_status | initial_time        | current_status | current_status_time
1234         | received       | 2013-05-06 15:00:00 | approved       | 2013-05-06 16:00:00

我怎样才能完成这样的事情,最好只使用联接而不使用嵌套选择?

最佳答案

一般来说,解决此问题的最佳方法是使用 row_number() 函数。但是,这需要嵌套选择:

select t.applicant_id,
       max(case when seqnum_asc = 1 then status end) as initial_status,
       max(case when seqnum_asc = 1 then status_time end) as initial_time,
       max(case when seqnum_desc = 1 then status end) as current_status,
       max(case when seqnum_desc = 1 then status_time end) as current_time
from (select t.*,
             row_number() over (partition by applicant_id order by status_time) as seqnum_asc,
             row_number() over (partition by applicant_id order by status_time desc) as seqnum_desc
      from t
     ) t
group by t.applicant_id;

如果您的数据库不支持row_number(),我建议使用相关子查询,以提高可读性。但这些也是嵌套的。这是 MySQL 中满足您要求的解决方案:

select t.applicant_id,
       substring_index(group_concat(status) separator ',' order by status_time), ',', 1) as initial_status,
       min(status_time) as initial_time,
       substring_index(group_concat(status) separator ',' order by status_time desc), ',', 1) as current_status,
       max(status_time) as current_time
from t
group by t.applicant_id;

关于mysql - SQL 查询 - 打印同一行中一个表的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16407715/

相关文章:

java - Hibernate 4.3.0 XML 映射转义字符异常

Mysql2::错误:无法连接到 '127.0.0.1' 上的 MySQL 服务器 (61)

sql - 如何将列值转换为行值?

sql - 具有三个表的递归 CTE

sql - 在 Slick 2.0 中没有 groupBy 的情况下聚合多列

php - SQL特殊文本转义

mysql - MySQL 的 PGDATA 等效项

mysql - Lua mysql,需要一种方法来转义数据

mysql - Mysql 存储过程中循环内的 Select 语句

mysql - 在 mysql 中,我如何设置一个带有最后日期和时间的变量