0

我有下表

日期时间,数据值

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

有什么建议么?

4

7 回答 7

2

在 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
于 2011-05-09T12:48:54.953 回答
0

试试那些:

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
于 2011-05-09T10:40:12.827 回答
0

这行得通吗?

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-05-09T10:40:14.060 回答
0

就像是

  select TO_DAYS(date_time) as dt,  min(date_time) from xxx group by dt;
于 2011-05-09T10:41:52.067 回答
0
select d(date_time), min(data_value)
from table
group by d(date_time)

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

在 Oracle SQL 中,该函数是trunc

于 2011-05-09T10:42:14.167 回答
0
 SELECT (ord_date), min([qty])

      FROM [pubs].[dbo].[sales]

     group by [ord_date]

     order by ord_date
于 2011-05-10T03:30:11.150 回答
0

尝试这个

select min(val),substring(date,1,10) from table group by substring(date,1,10)
于 2011-05-10T03:22:59.233 回答