【问题标题】:Select min(value) form each day每天选择最小值(值)形式
【发布时间】:2011-08-21 14:19:10
【问题描述】:

我有下表

日期时间,数据值

date_time               data_value
----------------------- ----------------------
2011-03-28 15:05:29.000 20  
2011-03-28 15:55:39.000 40  
2011-03-28 16:25:45.000 30

2011-03-28 23:37:11.000 10  
2011-03-29 04:43:12.000 44  
2011-03-29 05:13:18.000 55  
2011-03-29 05:28:21.000 52  
2011-03-29 05:48:25.000 23  
2011-03-29 06:13:30.000 8  
2011-03-29 07:03:40.000 34  
2011-03-29 08:34:01.000 25  
2011-03-29 09:34:20.000 35  
2011-03-29 09:49:23.000 23  
2011-03-30 16:00:55.000 20

我想获取sql中每个日期的最小值:

2011-03-29 06:13:30.000 8  
2011-03-28 15:05:29.000 20

有什么建议吗?

【问题讨论】:

  • 您使用的是哪个数据库平台?

标签: sql datetime min


【解决方案1】:

在 SQL Server 2005+ 中:

WITH ranked AS (
  SELECT
    date_time,
    data_value,
    rownum = ROW_NUMBER() OVER (
      PARTITION BY DATEADD(day, DATEDIFF(day, 0, date_time), 0)
      ORDER BY data_value
    )
  FROM atable
)
SELECT
  date_time,
  data_value
FROM ranked
WHERE rownum = 1

【讨论】:

    【解决方案2】:

    试试那些:

    SELECT FROM_DAYS(TO_DAYS(data_time)) AS dt, min(data_value) FROM table GROUP BY TO_DAYS(NOW())
    
    SELECT DATE_FORMAT(data_time,'YYY-MM-01') AS dt, min(data_value) FROM table GROUP BY dt
    

    【讨论】:

    • 这是 MySQL(我误以为问题被标记为 MySQL)
    【解决方案3】:

    类似

      select TO_DAYS(date_time) as dt,  min(date_time) from xxx group by dt;
    

    【讨论】:

      【解决方案4】:

      这行得通吗?

      SELECT date_time, MIN(data_value)
      FROM TABLE
      GROUP BY date_time
      

      抱歉,您现在格式化了显然无法正常工作的数据!您需要对 date_time 应用一个函数,以删除仅日期并忽略时间部分。

      在 MySQL(和其他,例如 DB2)中,你会这样做:

         SELECT DATE(date_time), MIN(data_value)
          FROM TABLE
          GROUP BY DATE(date_time)
      

      对于 SQL Server,这看起来应该可以工作,请有人验证:

      SELECT CONVERT(varchar(10), date_time), MIN(data_value)
      FROM TABLE
      GROUP BY CONVERT(varchar(10), date_time)
      

      【讨论】:

      • 这只返回我 2011-03-29 06:13:30.000 8
      • 我使用 sql express 所以 DATE 不适用
      • 你能做 SELECT CONVERT(varchar(10), date_time) .... GROUP BY CONVERT(varchar(10), date_time) - 这足以展示这些数据。
      • 无论如何我想得到的是每个日期的最小值,而不是整个表格的最小值,用于选择我使用的日期 select min(data_value), convert(varchar, date_time, 2) date
      【解决方案5】:

      试试这个

      select min(val),substring(date,1,10) from table group by substring(date,1,10)
      

      【讨论】:

        【解决方案6】:
         SELECT (ord_date), min([qty])
        
              FROM [pubs].[dbo].[sales]
        
             group by [ord_date]
        
             order by ord_date
        

        【讨论】:

          【解决方案7】:
          select d(date_time), min(data_value)
          from table
          group by d(date_time)
          

          其中 d 是从 date_time 中提取日期部分的函数。 (查看您的 SQL 参考手册了解函数名称)。

          在 Oracle SQL 中,该函数是 trunc

          【讨论】:

            猜你喜欢
            • 2020-08-19
            • 2020-05-16
            • 2017-10-02
            • 1970-01-01
            • 2023-03-07
            • 2021-05-06
            • 1970-01-01
            • 2019-02-08
            • 1970-01-01
            相关资源
            最近更新 更多