我想获取包含关联日期列的列的最小值和最大值。下面是一个简单的表格示例和所需的输出。

ID  SCORE   DATE
1   100     1-1-2018
2   99      2-1-2018
3   102     3-1-2018
4   99      4-1-2018
5   98      5-1-2018
6   102     6-1-2018
7   100     7-1-2018

输出应该是
MinValue    MinDate     MaxValue    MaxDate
98          5-1-2018    102         6-1-2018

如果min或max值多次出现,则应返回最后一个日期。
通过使用内部连接,我可以在一个查询中为最小值或最大值获取适当的日期,但不能同时为这两个查询都获取。请参见下面的示例:
SELECT score as MinValue, date as MinDate
FROM table inner join (select min(score) from table ) x on table.score= x.score
ORDER BY date desc
LIMIT 1

这里有一个SqlFiddlehttp://sqlfiddle.com/#!9/f50ced/4
在一个查询中提取所有必需的值是否可能和有效?

最佳答案

这里有一种方法;不确定它是否是最快的。
在一个派生表中获取MaxMin值。
“self”将此表连接两次,以获取最小值和最大值的相应日期。
有趣的是,MaxValue在mysql中是一个Reserved Keyword函数;因此必须使用反勾号(`)。
尝试:

SELECT MIN(t1.minValue) AS minValue,
       MAX(t2.Date) AS minDate,
       MAX(t1.`maxValue`) AS `maxValue`,
       MAX(t3.Date) AS maxDate
FROM
    (
     SELECT MIN(score) AS minValue,
            MAX(score) AS `maxValue`
     FROM your_table
    ) AS t1
    JOIN your_table AS t2 ON t2.score = t1.minValue
    JOIN your_table AS t3 ON t3.score = t1.`maxValue`

关于mysql - 使用日期列获取最小值和最大值的最有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52644176/

10-14 19:32
查看更多