如何显示一列的最小值,并使用同一列的最大值来过滤mysql中的其他属性?
how to display min of a column and use max of the same column to filter other attributes in mysql?
输入:
ID CREATED_TIME CANCELED_TIME
1 4 10
1 8 2
1 6 -1
1 3 7
2 5 null
2 4 8
期望的输出:
ID CREATED_TIME CANCELED_TIME
1 3 2
2 4 null
所以我基本上想显示 id、min(created_time) 和每个用户最大 created_time 行的取消时间?请在 PostgreSql 和 MySql?
中提供答案
如果您想要 canceled_time
其中 created_time
具有最大值,我建议使用 substring_index()
/group_concat()
技巧:
select id, min(created_time),
substring_index(group_concat(canceled_time order by created_time desc), ',', 1) as canceled_time
from table
group by id;
这在使用默认设置的所有情况下都不起作用,因为 group_concat()
中间结果有最大长度。但是,它确实适用于最合理的数据集,而且绝对适用于您问题中的数据。
使用子查询查找每个 id 的最大值 created_time:
SELECT
ID,
created_time,
MIN(CANCELED_TIME) AS MinTimeCanceled
FROM
tableName t1
WHERE created_time = (select max(created_time) from tableName t2
where t1.ID = t2.ID)
GROUP BY
ID, created_time
您需要 TOTALS 或 GROUP BY 查询。像,
SELECT
ID,
Min(CREATED_TIME) As MinimumCreationTime
Min(CANCELED_TIME) As MinimumCancelledTime
FROM
yourTableName
GROUP BY
ID;
输入:
ID CREATED_TIME CANCELED_TIME
1 4 10
1 8 2
1 6 -1
1 3 7
2 5 null
2 4 8
期望的输出:
ID CREATED_TIME CANCELED_TIME
1 3 2
2 4 null
所以我基本上想显示 id、min(created_time) 和每个用户最大 created_time 行的取消时间?请在 PostgreSql 和 MySql?
中提供答案如果您想要 canceled_time
其中 created_time
具有最大值,我建议使用 substring_index()
/group_concat()
技巧:
select id, min(created_time),
substring_index(group_concat(canceled_time order by created_time desc), ',', 1) as canceled_time
from table
group by id;
这在使用默认设置的所有情况下都不起作用,因为 group_concat()
中间结果有最大长度。但是,它确实适用于最合理的数据集,而且绝对适用于您问题中的数据。
使用子查询查找每个 id 的最大值 created_time:
SELECT
ID,
created_time,
MIN(CANCELED_TIME) AS MinTimeCanceled
FROM
tableName t1
WHERE created_time = (select max(created_time) from tableName t2
where t1.ID = t2.ID)
GROUP BY
ID, created_time
您需要 TOTALS 或 GROUP BY 查询。像,
SELECT
ID,
Min(CREATED_TIME) As MinimumCreationTime
Min(CANCELED_TIME) As MinimumCancelledTime
FROM
yourTableName
GROUP BY
ID;