[英]Most efficient way to select corresponding value in another column for MIN(column)
[英]Most efficient way to get min and max value with date column
我想获得包含相关日期列的列的最小值和最大值。 下面是一个简单的表格示例和所需的输出。
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
如果多次出现最小值或最大值,则应返回最后一个日期。
通过使用内部联接,我可以在一个查询中获得最小OR最大值的适当日期,但不能同时获得两者。 见下面的例子:
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
这是一个sqlfiddle http://sqlfiddle.com/#!9/f50ced/4
在一个查询中提取所有必需值是否可行且有效?
这是一种方法; 不确定它是否是最快的。
Max
和Min
。 MaxValue
是MySQL中的保留关键字 ; 所以不得不在它周围使用反引号(`)。 尝试:
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`
你可以试试这个:
select
@minv := (select min(SCORE) from tbl) as MinValue,
(select min(DATE) from tbl WHERE SCORE = @minv) as MinDate,
@maxv := (select max(SCORE) from tbl) as MxValue,
(select max(DATE) from tbl WHERE SCORE = @maxv) as MaxDate
;
结果如下所示:
+----------+----------+---------+----------+
| MinValue | MinDate | MxValue | MaxDate |
+----------+----------+---------+----------+
| 98 | 5-1-2018 | 102 | 6-1-2018 |
+----------+----------+---------+----------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.