Выберите мин (значение) формы каждый день - PullRequest
0 голосов
/ 09 мая 2011

У меня есть следующая таблица

date_time, data_value

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

anyпредложения?

Ответы [ 7 ]

2 голосов
/ 09 мая 2011

В 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
0 голосов
/ 10 мая 2011
 SELECT (ord_date), min([qty])

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

     group by [ord_date]

     order by ord_date
0 голосов
/ 10 мая 2011

Попробуйте это

select min(val),substring(date,1,10) from table group by substring(date,1,10)
0 голосов
/ 09 мая 2011
select d(date_time), min(data_value)
from table
group by d(date_time)

где d - это функция, которая извлекает часть даты из date_time. (проверьте ваше справочное руководство по SQL для названия функции).

В Oracle SQL эта функция trunc .

0 голосов
/ 09 мая 2011

Что-то вроде

  select TO_DAYS(date_time) as dt,  min(date_time) from xxx group by dt;
0 голосов
/ 09 мая 2011

Это работает?

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)
0 голосов
/ 09 мая 2011

Попробуйте те:

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