【问题标题】:Grouping table on the basis of date [closed]基于日期的分组表[关闭]
【发布时间】:2016-07-19 10:51:48
【问题描述】:

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

|------|--------------|--------------|
|  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

【问题讨论】:

  • 请阅读How to Ask。并编辑问题并添加minimal reproducible example
  • 您会分享您可能尝试过的任何查询吗?
  • 那么为什么不这样做!?!?!?
  • ** Select * from test group by fromdate order by fromdate,todate ** -- 想要这样的东西..这并没有给我正确的结果。
  • @NiyasNiya 请接受您认为最有帮助的答案。单击答案旁边的空心对勾以接受它。接受也会给你代表!

标签: mysql


【解决方案1】:

简单:

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

【讨论】:

  • 糟糕!我只比你晚了 19 秒!
  • 谢谢你..这就是我想要的。
【解决方案2】:

您可以使用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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2017-03-15
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    相关资源
    最近更新 更多