根据日期分组表

时间:2016-03-31 06:28:09

标签: mysql

我有下表。我需要按fromdate进行分组, 并为每个todate获得最少fromdate的结果。我该怎么办?

|------|--------------|--------------|
|  id  |    fromdate  |     todate   | 
|------|--------------|--------------|
| 1    |  2016-03-01  |  2016-01-05  |  
| 2    |  2016-03-01  |  2016-01-11  |  
| 3    |  2016-03-01  |  2016-01-12  | 
| 4    |  2016-03-05  |  2016-01-05  | 
| 5    |  2016-03-05  |  2016-01-11  | 
| 6    |  2016-03-06  |  2016-01-04  | 
| 7    |  2016-03-06  |  2016-01-17  | 
| 8    |  2016-03-06  |  2016-01-19  | 
| 9    |  2016-03-09  |  2016-01-04  | 
|10    |  2016-03-09  |  2016-01-11  | 
|------|--------------|--------------|

我试过这个,但它没有给我预期的结果:

Select * from test group by fromdate order by fromdate, todate

2 个答案:

答案 0 :(得分:1)

简单:

SELECT fromDate, MIN(toDate) as minToDate FROM theTable GROUP BY fromDate

答案 1 :(得分:1)

您可以使用min聚合函数。 MySQL文档中给出的示例看起来与您需要的类似。

mysql> SELECT student_name, MIN(test_score), MAX(test_score)
    ->        FROM student
    ->        GROUP BY student_name;

因此,对于您的情况,它将是:

SELECT
    fromdate, MIN(todate)
FROM
    mytable
GROUP BY fromdate;

查看此SO question的已接受答案,其中显示了如何获得最短日期,当然使用min()