franken 發問時間: 電腦與網際網路程式設計 · 1 0 年前

SQL資料查詢語法

 Date   Time  Temp RH

2009/02/04 12:50:00 23.7 63

2009/02/04 01:00:00 23.7 69

2009/02/04 01:10:00 24.7 63

2009/02/04 01:20:00 23.6 63

2009/02/04 01:30:00 23.6 50

2009/02/04 01:40:00 23.6 63

2009/02/04 01:50:00 23.6 63

2009/02/04 02:00:00 22.2 64

2009/02/04 02:10:00 28.6 80

2009/02/04 02:20:00 25.8 75

2009/02/04 02:30:00 25.6 75

2009/02/04 02:40:00 25.6 75

2009/02/04 02:50:00 25.6 73

2009/02/04 03:00:00 24.0 70

2009/02/04 03:10:00 23.6 64

以上是我SQL資料表所記錄的資料,有日期,時間,溫度,濕度

資料每十分鐘會記錄一筆。

 

我想要查詢每個欄位資料整點的平均,最大,最小值。該如何查詢呢?

查詢結果要像以下這樣:(以下資料為實際計算的結果)

 

 Date    Time  TempAvg TempMax TempMin RHAvg RHMax RHMin

2009/02/04 02:00:00  23.38   24.7    22.2   52.14  69   50

2009/02/04 03:00:00  25.86   28.6    24.0   74.66  80   70

 

2點的平均計算是取資料01:10:00到02:00:00共六筆資料

3點的平均計算是取資料02:10:00到03:00:00共六筆資料

 

煩請各位先進不另賜教! 謝謝

已更新項目:

更正 

2點的平均計算是取資料01:00:00到01:50:00共六筆資料

3點的平均計算是取資料02:00:00到02:50:00共六筆資料

 

以上的查詢結果資料是未更正的結果。

2 個已更新項目:

很感謝YogiBear的用心,我測試了一下是OK的。

但是我是用SQL DATABASE您的語法在SQL執行有問題。

我再改看看可不可以!謝謝

3 個已更新項目:

ogiBear你好我依據你的查詢,將欄位名稱由日期改成Ddate,時間改成ttime以及資料表名稱改成test。

出現以下錯誤!

[Microsoft][ODBC SQL Server Driver][SQL Server]資料行 'test.ttime'在選取清單中無效, 

因為它並未包含在彙總函數或GROUP BY子句中。

4 個已更新項目:

ttime 資料表的資料型別設成char以及datetime出現的錯誤都一樣。

5 個已更新項目:

還是一樣ㄋㄟ,為什麼會這樣阿?奇怪!!

[Microsoft][ODBC SQL Server Driver][SQL Server]資料行 'test.ttime'在選取清單中無效,

因為它並未包含在彙總函數或GROUP BY子句中。

6 個已更新項目:

PS:說明我的SERVER電腦的時間格式是 HH:mm:ss不是 tt hh:mm:ss 有關係嗎?

8 個已更新項目:
9 個已更新項目:

去掉日期,時間就可以。

http://franken.myweb.hinet.net/temp/OK.JPG

10 個已更新項目:

真奇怪我,的是 SQL SERVER 2000 OS 是 WINDWOS SERVER 2003為什麼不行!!!

3 個解答

評分
  • chien
    Lv 7
    1 0 年前
    最佳解答

    SELECT

    Format(DateSerial(Year(First(日期)),Month(First(日期)),Day(First(日期))+IIf(Hour(First(時間))=23,1,0)),"YYYY/MM/DD") AS Dat,

    Format(TimeSerial(Hour(First(時間))+1,0,0),"HH:mm:SS") AS Tim,

    Format(Avg(Temp),"0.00") AS TempAvg, Format(Max(Temp),"0.0") AS TempMax, Format(Min(Temp),"0.0") AS TempMin,

    Format(Avg(RH),"0.00") AS RHAvg, Format(Max(RH),"0.0") AS RHMax, Format(Min(RH),"0.0") AS RHMin

    FROM record

    GROUP BY 日期, DatePart("h",時間)

    HAVING (((Count(日期))>0) And ((Count(時間))>0));

    資料表名稱: record

    欄位名稱: 日期、時間、temp、RH

    範例在這裡:

    http://david-space.myweb.hinet.net/Files/Temp_Rh.z...

    2009-02-20 15:08:44 補充:

    這是在 access 中試的。

    2009-02-20 18:18:32 補充:

    剛在 SQL Server 2008 上試過的。

    字數太多,請看這裡:

    http://david-space.myweb.hinet.net/Files/Temp_RH.t...

    2009-02-23 10:07:37 補充:

    我是把型別設為 Char

    再看:

    http://david-space.myweb.hinet.net/Files/Rh_New.tx...

    2009-02-23 13:23:17 補充:

    貼上來看看ㄅ

    2009-02-23 15:03:09 補充:

    我的 server 可以耶,再瞧瞧:

    http://david-space.myweb.hinet.net/Files/rh.png

  • 5 年前

    網上看了這家,因為我公司的硬碟故障,微軟的張經理都找過他們,把他們送去內湖救不出來的,都給救出來

    http://www.datamaster.com.tw/

    http://millerforyew1.pixnet.net/blog/

  • 1 0 年前

    參考看看.這樣可不可以

    SELECT [Date], SUBSTRING([Time], 1, 2), AVG([Temp]), AVG(RH)

    FROM Sheet1

    GROUP BY SUBSTRING([Time], 1, 2), [Date]

    2009-02-21 18:32:20 補充:

    SELECT [Date], SUBSTRING([Time], 1, 2) AS Time, AVG([Temp]) AS TempAvg,

    MAX([Temp]) AS TempMax, MIN([Temp]) AS TempMin, AVG(RH) AS RHAvg,

    MAX(RH) AS RHMax, MIN(RH) AS RHMin

    FROM Sheet1

    GROUP BY SUBSTRING([Time], 1, 2), [Date]

    參考資料: 自己
還有問題?馬上發問,尋求解答。