Mysql 如何使用自联接选择最小值和最大值
我有一张这样的桌子:Mysql 如何使用自联接选择最小值和最大值,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,我有一张这样的桌子: pk client value date 1 001 564 2012/5/1 2 002 245 2012/6/1 3 003 445 2012/6/6 4 001 845 2012/7/1 5 002 567 2012/8/1 6 001 123 2012/9/1 我知道这可以用每个组最大的n和一个自加入来解决,但我很难弄清楚 基本上这就是我想要的输出 client min(value) max(
pk client value date
1 001 564 2012/5/1
2 002 245 2012/6/1
3 003 445 2012/6/6
4 001 845 2012/7/1
5 002 567 2012/8/1
6 001 123 2012/9/1
我知道这可以用每个组最大的n和一个自加入来解决,但我很难弄清楚
基本上这就是我想要的输出
client min(value) max(value) date_for_min(value) date_for_max(value)
001 123 845 2012/9/1 2012/7/1
002 245 567 2012/6/1 2012/8/1
003 445 445 2012/6/6 2012/6/6
棘手的部分是为每个客户机只获取一行的最小/最大值,然后获取与这些最小/最大值一起的其他列。有什么想法吗?如果某个最小值或最大值有多行(对于同一个客户机),我已经为您提供了它们出现的最早日期:
select t1.client, t1.MinValue, t1.MaxValue, min(t2.date) as date_for_min_value, min(t3.date) as date_for_max_value
from (
select client, min(value) as MinValue, max(value) as MaxValue
from MyTable
group by client
) t1
inner join MyTable t2 on t1.client = t2.client and t1.MinValue = t2.Value
inner join MyTable t3 on t1.client = t3.client and t1.MaxValue = t3.Value
group by t1.client, t1.MinValue, t1.MaxValue
您可以使用以下选项:
select distinct t1.client, t1.mnval, mindate.dt, t1.mxval, maxdate.dt
from
(
select min(value) mnval, max(value) mxVal, client
from yourtable
group by client
) t1
inner join yourtable t2
on t1.client = t2.client
inner join yourtable mindate
on t1.client = mindate.client
and t1.mnval = mindate.value
inner join yourtable maxdate
on t1.client = maxdate.client
and t1.mxVal = maxdate.value
您是否希望与
min(值)
关联的date\u和date\u和max(值)
是与min(值)
关联的值,然后是max(值)
?如果是这样,那么客户端001
上的日期似乎不正确。你能确认一下吗?抓得好。是的,我想要与最小/最大值关联的日期。我更新了问题。