0

私は次の表を持っています

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

助言がありますか?

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 に答える