【问题标题】:select data group by distinct date and get first and last data in the group按不同日期选择数据组并获取组中的第一个和最后一个数据
【发布时间】:2015-02-18 01:59:59
【问题描述】:

我不确定这是否可行,我有一个带有时间戳的数据表

例如

apple    2013-01-02 06:24:22
banana    2013-01-12 11:08:22
apple    2013-01-02 15:24:22
apple    2013-01-02 12:30:16
banana    2013-01-14 18:34:22

我想:

  1. 根据不同的日期而不是时间戳重新排列数据库,这意味着所有相同的日期将组合在一起
  2. 如果可能的话,我希望在最终结果中达到以下目标

    apple     2013-01-02 06:24:22  2013-01-02 15:24:22  // get first and last data
    banana    2013-01-12 11:08:22  2013-01-12 11:08:22  // only one data in the group
    banana    2013-01-14 18:34:22  2013-01-14 18:34:22  // only one data in the group
    

如何使用最少的 sql 查询而不是使用循环来确定?

【问题讨论】:

    标签: mysql sql date select aggregate-functions


    【解决方案1】:

    此查询应该可以满足您的需求。 (问题的第二部分)

    SELECT Fruit, Min(DateTime) AS FirstDateTime, Max(DateTime) AS LastDateTime FROM Table1 
    GROUP BY DATE(DateTime);
    

    这会给你输出

    FRUIT      FIRSTDATETIME           LASTDATETTIME
    apple     2013-01-02 06:24:22  2013-01-02 15:24:22
    banana    2013-01-12 11:08:22  2013-01-12 11:08:22 
    banana    2013-01-14 18:34:22  2013-01-14 18:34:22
    

    【讨论】:

      【解决方案2】:

      使用 MySQL DATE() 函数。

      SELECT FRUIT_NAME, DATE(mydate) AS dateStamp FROM TABLE 
      GROUP BY DATE(TABLE.mydate);
      

      地点:

      FRUIT_NAME:你的名字字段

      mydate 你的日期字段。

      【讨论】:

      • 谢谢,其实我更关心第二部分的问题,你有什么解决办法吗?
      【解决方案3】:

      试试这个:

      SELECT fruitName, MIN(a.timestamp), MAX(a.timestamp)
      FROM tableA a 
      GROUP BY DATE(a.timestamp), fruitName;
      

      【讨论】:

      • 嗨,第二部分有什么解决方案吗?有些组可能有 5-6 条记录,有些可能只有一条
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2013-12-01
      相关资源
      最近更新 更多