繁体   English   中英

使用日期列获取最小值和最大值的最有效方法

[英]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

在一个查询中提取所有必需值是否可行且有效?

这是一种方法; 不确定它是否是最快的。

  • 在一个派生表中获取MaxMin
  • “Self”将此表连接两次,以获得最小值和最大值的相应日期。
  • 有趣的是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM