我有一个名为“ ArchiveTable”的下表:

+ --------- + ----------------- + --------- + ----------- ------ + -------------- + ------------------ +
| maxtemp | maxtemptime | mintemp |最短时间| minwindchill | minwindchilltime |
+ --------- + ----------------- + --------- + ----------- ------ + -------------- + ------------------ +
| 27.9 | 3/17/2015 16:55 | 25.8 | 2015/3/17 19:00 | 25.8 | 2015/3/17 19:00 |
+ --------- + ----------------- + --------- + ----------- ------ + -------------- + ------------------ +
| 25.7 | 2015/3/17 19:05 | 19.3 | 2015/3/18 9:05 | 19.3 | 2015/3/18 9:05 |
+ --------- + ----------------- + --------- + ----------- ------ + -------------- + ------------------ +
| 23.1 | 2015/3/18 19:05 | 18.7 | 2015/3/19 6:30 | 18.7 | 2015/3/19 6:30 |
+ --------- + ----------------- + --------- + ----------- ------ + -------------- + ------------------ +

我必须选择“ maxtemp”的最大值及其对应的“ maxtemptime”日期,“ mintemp”的最小值及其对应的日期以及“ minwindchill”的最小值及其对应的日期。

我知道如何使用MAX()MIN()函数获取最大值和最小值,但是我无法将这些值关联到相应的日期。

最佳答案

如果可以将值分别放在不同的行上,则可以执行以下操作:

(select a.* from archivetable order by maxtemp limit 1) union
(select a.* from archivetable order by maxtemp desc limit 1) union
. . .


否则,如果您可以执行以下操作:

select atmint.mintemp, atmint.mintempdate,
       atmaxt.maxtemp, atmaxt.maxtempdate,
       atminwc.minwindchill, atminwc.minwindchilldate
from (select min(mintemp) as mintemp, max(maxtemp) as maxtemp, min(minwindchill) as minwindchill
      from archivetable
     ) a join
     archivetable atmint
     on atmint.mintemp = a.mintemp join
     archivetable atmaxt
     on atmaxt.maxtemp = a.maxtemp join
     archivetable atminwc
     on atminwc.minwindchill = a.minwindchill
limit 1;


limit 1是因为多个行可能具有相同的值。如果是这样,您可以根据问题的表达方式任意选择其中之一。

关于mysql - 从MySQL选择行并使用MAX和MIN进行分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30700057/

10-16 15:24