我有这样的表格数据
Column_a | Column_b
a | 5
b | 25
g | 14
t | 13
b | 15
c | 04
g | 15
b | 13
<_>在column_a中我有很多重复值,我希望能够从表中选择所有行,但如果两行具有相同的column_a值,我只想要colum_b中具有最大值的行结果
例如我正在寻找的结果:
Column_a | Column_b
a | 5
b | 25
t | 13
c | 04
g | 15
**
**
这些是我在表格中的列: CRMID |用户| ticket_id | |描述|日期|小时
我要做的是从表中选择所有行,但是当两行具有相同的ticket_id时,我只希望最新的一行显示在结果中,所以具有最新日期和小时的行, 很抱歉这么复杂! 我不是母语为英语的人,我觉得很难解释这个问题。
答案 0 :(得分:4)
如果按column_a
进行分组,则可以使用max()
等聚合函数来获取每个组的最大值
select column_a,
max(column_b) as column_b
from your_table
group by column_a
答案 1 :(得分:3)
SELECT Column_A, MAX(Column_B) FROM table
GROUP BY Column_A
答案 2 :(得分:2)
您正在寻找Group By
条款。您的语法应该类似于:
SELECT Column_A, MAX(Column_B)
FROM Table
GROUP BY Column_A
答案 3 :(得分:1)
如果要获取表中的所有列,则会出现其他问题(而不是原始发布中的问题)。您应该在这样的问题中添加代码的一个原因是,您可以获得更广泛的答案。举个例子,我忽略了这个问题,认为这只是一个新手询问明显的SQL功能。
在MySQL中,最好的方法是使用not exists
:
select t.*
from table t
where not exists (select 1
from table t2
where t2.column_a = t.column_a and
t2.column_b > t.column_b
);
为获得最佳性能,您需要table(column_a, column_b)
上的索引。此外,如果存在重复的最大值,则可以返回多行。
此查询不直观。它正在做的是:“从表中获取所有行,其中没有其他行具有相同的column_a
值和更高的column_b
值”。如果你考虑一下,这与获得最大值相同。这比其他方法(特别是聚合和连接)具有更好的性能,因为MySQL对表中的每一行执行简单的索引查找。这比聚合和加入更快。
答案 4 :(得分:-1)
select * from(select * from yourtable order by column_b desc)t group by column_a