簡體   English   中英

行中的MySQL最大值

[英]MySQL max value in row

我面臨MySQL查詢的問題,這是“具有最大值的行的ID”的變體。 我所有的試驗都出錯或結果不正確。

這是表格結構

Row_id
Group_id
Grp_col1
Grp_col2
Field_for_aggregate_func
Another_field_for_row

對於具有特定group_id的所有行,我想按字段Grp_col1,Grp_col2進行分組,然后獲取Field_for_aggregate_func的最大值,然后再獲取Another_field_for_row的對應值。

我嘗試過的查詢如下

SELECT c.*
FROM mytable as c left outer join mytable as c1
on (
    c.group_id=c1.group_id and
    c.Grp_col1 = c1.Grp_col1 and
    c.Grp_col2 = c1.Grp_col2 and
    c.Field_for_aggregate_func > c1.Field_for_aggregate_func
)
where c.group_id=2

在針對此問題的替代解決方案中,我需要一種高性能的解決方案,因為它將用於大量數據。

編輯:這是行和預期答案的示例集

Group_ID Grp_col1 Grp_col2  Field_for_aggregate_func Another_field_for_row  
2           --      N       12/31/2015               35 
2           --      N       1/31/2016                15 select 15 from group for max value 1/31/2016

2           --      Y       12/31/2015               5  
2           --      Y       1/1/2016                 15 
2           --      Y       1/2/2016                 25 
2           --      Y       1/3/2016                 30 select 30 from group for max value 1/3/2016

您可以使用子查詢來找到最大值,然后將其與原始表連接起來,如下所示:

select m1.group_id, m1.grp_col1, m1.grp_col2, m1.another_field_for_row, max_value
from mytable m1, (
  select group_id, grp_col1, grp_col2, max(field_for_aggregate_func) as max_value
  from mytable
  group by group_id, grp_col1, grp_col2) as m2
where m1.group_id=m2.group_id
  and m1.grp_col1=m2.grp_col1
  and m1.grp_col2=m2.grp_col2
  and m1.field_for_aggregate_func=m2.max_value;

請注意給定分組的max_value是否超過一個。 您將獲得該分組的多行。 在這里擺弄。

嘗試這個。

在這里查看小提琴演示

http://sqlfiddle.com/#!9/9a3c26/8

Select t1.* from table1 t1 inner join
(
Select a.group_id,a.grp_col2,
A.Field_for_aggregate_func, 
count(*) as rnum from table1 a
Inner join table1 b
On a.group_id=b.group_id
And a.grp_col2=b.grp_col2
And a.Field_for_aggregate_func
<=b.Field_for_aggregate_func
Group by a.group_id,
a.grp_col2,
a.Field_for_aggregate_func) t2
On t1.group_id=t2.group_id
And t1.grp_col2=t2.grp_col2
And t1.Field_for_aggregate_func
=t2.Field_for_aggregate_func
And t2.rnum=1

在這里,我首先根據日期以降序分配行號。 選擇該日期的所有記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM